<?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: Kavin Kim</title>
    <description>The latest articles on DEV Community by Kavin Kim (@kavinkimcreator).</description>
    <link>https://dev.to/kavinkimcreator</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%2F3813868%2F70b4f6fe-f78e-4055-a8fb-2350520089e2.jpg</url>
      <title>DEV Community: Kavin Kim</title>
      <link>https://dev.to/kavinkimcreator</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kavinkimcreator"/>
    <language>en</language>
    <item>
      <title>Your Agent Made a $500 Mistake. Who Pays?</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Sun, 31 May 2026 10:11:15 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/your-agent-made-a-500-mistake-who-pays-545a</link>
      <guid>https://dev.to/kavinkimcreator/your-agent-made-a-500-mistake-who-pays-545a</guid>
      <description>&lt;p&gt;Last month, American Express did something no other financial institution has done: they promised to cover losses when AI agents make purchasing errors. They called it Agent Purchase Protection.&lt;/p&gt;

&lt;p&gt;One company. Out of the entire global payments industry.&lt;/p&gt;

&lt;p&gt;That tells you everything about the state of agent payment dispute resolution in 2026.&lt;/p&gt;

&lt;p&gt;The Dispute Gap Nobody Talks About&lt;/p&gt;

&lt;p&gt;Chargebacks911 issued a formal warning this month: AI agents are creating "a new era of dispute risk" for merchants and banks. The Consumer Bankers Association went further, warning that agent-initiated mistakes could overwhelm existing dispute resolution infrastructure entirely.&lt;/p&gt;

&lt;p&gt;Here is why:&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;# Traditional dispute flow (human buyer)
# 1. Human buys product
# 2. Product is wrong/defective
# 3. Human calls bank
# 4. Bank reverses charge (chargeback)
# 5. Merchant eats the cost
# Timeline: 60-120 days, one dispute at a time
&lt;/span&gt;
&lt;span class="c1"&gt;# Agent dispute flow (no framework exists)
# 1. Agent buys 200 API calls at $2.50 each
# 2. Agent used wrong parameters (semantic error)
# 3. Who notices? When?
# 4. Who files the dispute? The agent? The human?
# 5. What evidence proves the agent was authorized?
# 6. What if 50 agents make the same mistake simultaneously?
# Timeline: ???, potentially thousands of disputes per hour
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The traditional chargeback system handles roughly 615 million disputes per year globally. It was designed for humans making one purchase at a time. AI agents can execute thousands of transactions per hour across multiple services simultaneously.&lt;/p&gt;

&lt;p&gt;Why Stablecoin Payments Make This Worse&lt;/p&gt;

&lt;p&gt;USDC transactions on blockchain are final. There is no chargeback mechanism. Once funds transfer, they cannot be reversed by a third party.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;If your agent overpays, you cannot reverse it&lt;/li&gt;
&lt;li&gt;If your agent buys the wrong service, there is no dispute button&lt;/li&gt;
&lt;li&gt;If your agent exceeds its intended budget, the money is gone&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The only protection is prevention: proving authorization before the transaction, not disputing it after.&lt;/p&gt;

&lt;p&gt;What AmEx Got Right (And What Is Still Missing)&lt;/p&gt;

&lt;p&gt;American Express requires three things for Agent Purchase Protection:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Card Member must authorize the agent&lt;/li&gt;
&lt;li&gt;The agent must be registered&lt;/li&gt;
&lt;li&gt;The agent must transmit "authenticated purchase intent"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the right framework. But it only works within the AmEx closed-loop network. It does not cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;USDC payments (98.6% of on-chain agent transactions)&lt;/li&gt;
&lt;li&gt;Cross-platform agent spending&lt;/li&gt;
&lt;li&gt;Multi-agent delegation chains&lt;/li&gt;
&lt;li&gt;Real-time spending governance
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rosud_pay&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;AuditTrail&lt;/span&gt;

&lt;span class="c1"&gt;# Build the evidence chain BEFORE the transaction
&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;procurement_bot&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;authorized_by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;org_treasury&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;scope&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;max_per_tx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;50.00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;daily_limit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;500.00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;allowed_categories&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cloud_compute&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;api_access&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="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Every transaction creates an immutable audit record
&lt;/span&gt;&lt;span class="n"&gt;receipt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;compute_provider&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;12.50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;memo&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GPU instance 4h batch inference&lt;/span&gt;&lt;span class="sh"&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;receipt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;audit_trail&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# -&amp;gt; authorization: org_treasury (2026-05-31T09:00:00Z)
# -&amp;gt; scope_check: PASS (12.50 &amp;lt; 50.00 per-tx limit)
# -&amp;gt; daily_total: $187.50 of $500.00 (37.5% used)
# -&amp;gt; tx_hash: 0x8f2a...
# -&amp;gt; category_match: cloud_compute (ALLOWED)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three Layers of Dispute Prevention&lt;/p&gt;

&lt;p&gt;Layer 1: Pre-Transaction Authorization&lt;/p&gt;

&lt;p&gt;Before any payment executes, the system verifies: Is this agent authorized? Is this amount within scope? Is this merchant category allowed? If any check fails, the transaction never happens.&lt;/p&gt;

&lt;p&gt;Layer 2: Real-Time Aggregate Monitoring&lt;/p&gt;

&lt;p&gt;Individual transactions may be small. The risk is in aggregation. Fifty $10 transactions across five agents in one hour is $500 that no single check caught. Cross-agent visibility prevents death by a thousand cuts.&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;rosud_pay&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Governance&lt;/span&gt;

&lt;span class="c1"&gt;# Real-time aggregate view
&lt;/span&gt;&lt;span class="n"&gt;alerts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Governance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;check_org&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;org_treasury&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# -&amp;gt; WARNING: 5 agents spent $487 in last hour
# -&amp;gt; procurement_bot approaching daily limit (92%)
# -&amp;gt; new_vendor detected: "unknown_api_service" (not in allowlist)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Layer 3: Post-Transaction Audit Trail&lt;/p&gt;

&lt;p&gt;When disputes do occur (and they will), the audit trail provides cryptographic proof of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who authorized the agent&lt;/li&gt;
&lt;li&gt;What scope was defined&lt;/li&gt;
&lt;li&gt;Whether the transaction was within bounds&lt;/li&gt;
&lt;li&gt;The complete decision chain&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is what AmEx calls "authenticated purchase intent," extended to every payment rail, not just credit cards.&lt;/p&gt;

&lt;p&gt;The Regulatory Clock Is Ticking&lt;/p&gt;

&lt;p&gt;Three regulatory frameworks take effect this summer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MiCA full enforcement (July 2026)&lt;/li&gt;
&lt;li&gt;GENIUS Act final rules (July 2026)&lt;/li&gt;
&lt;li&gt;EU AI Act requirements (August 2026)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None explicitly address AI agent dispute resolution. Organizations that build audit trails now will have evidence when regulators ask "how do you handle agent payment disputes?"&lt;/p&gt;

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

&lt;p&gt;American Express is the only institution offering agent purchase protection. For everyone else, when your agent makes a $500 mistake, you eat the cost.&lt;/p&gt;

&lt;p&gt;The alternative is building the evidence chain before the dispute starts. Authorization, scope, real-time monitoring, and an immutable audit trail that proves exactly what happened and who approved it.&lt;/p&gt;

&lt;p&gt;That is what &lt;a href="https://www.rosud.com/rosud-pay" rel="noopener noreferrer"&gt;rosud-pay&lt;/a&gt; builds: not dispute resolution after the fact, but dispute prevention by design.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Start building agent payment governance: &lt;a href="https://www.rosud.com/docs" rel="noopener noreferrer"&gt;rosud.com/docs&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>payments</category>
      <category>fintech</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Telegram Just Opened the Door for Agent-to-Agent Communication. Here's Why That's Not Enough.</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Wed, 20 May 2026 05:51:42 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/telegram-just-opened-the-door-for-agent-to-agent-communication-heres-why-thats-not-enough-3gmn</link>
      <guid>https://dev.to/kavinkimcreator/telegram-just-opened-the-door-for-agent-to-agent-communication-heres-why-thats-not-enough-3gmn</guid>
      <description>&lt;p&gt;On May 7, 2026, Telegram became the first billion-user messaging platform to enable native bot-to-bot communication. One bot can now send a private message directly to another bot by referencing its @username. No intermediary server. No custom routing layer.&lt;/p&gt;

&lt;p&gt;For developers building multi-agent systems, this sounds like the answer. It isn't.&lt;/p&gt;

&lt;p&gt;What Telegram Actually Shipped&lt;/p&gt;

&lt;p&gt;The update is real and significant. Telegram's Bot API now supports direct agent-to-agent messaging with a mutual opt-in requirement. Both bots must explicitly enable the mode before they can exchange messages.&lt;/p&gt;

&lt;p&gt;The use cases Telegram outlined are practical: a code-review bot delegating to a specialist bot, enterprise booking agents coordinating sub-tasks, multi-step AI workflows executing end-to-end without human relay.&lt;/p&gt;

&lt;p&gt;With over 10 million bots already on the platform, those bots can now form networks. A research agent can offload data retrieval to a specialist bot and receive results back, all within Telegram's native infrastructure.&lt;/p&gt;

&lt;p&gt;This is progress. But it comes with three structural limitations that matter for production multi-agent systems.&lt;/p&gt;

&lt;p&gt;Limitation 1: Platform Lock-In&lt;/p&gt;

&lt;p&gt;Telegram's bot-to-bot communication works inside Telegram. Your Claude-powered agent on Telegram can talk to your GPT-powered agent on Telegram. But what about the agent running on Slack? The one deployed on AWS Bedrock? The custom Python bot on your own infrastructure?&lt;/p&gt;

&lt;p&gt;The moment your agent network spans more than one platform, Telegram's native communication becomes one channel among many, not the universal layer.&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="c1"&gt;// With rosud-call: platform-independent agent messaging&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;RosudCall&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;rosud-call&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;agent&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;RosudCall&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;procurement-bot-v3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;token&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;ROSUD_TOKEN&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// This works regardless of where the other agent lives&lt;/span&gt;
&lt;span class="c1"&gt;// Telegram, Slack, AWS, your own server - same API&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;inventory-checker&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;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;stock-query&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;sku&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;WIDGET-2000&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;urgency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;high&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Subscribe to responses from any agent, any platform&lt;/span&gt;
&lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;message&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;msg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;inventory-checker&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="s2"&gt;`Stock level: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;quantity&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="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;Limitation 2: Security Coverage Gap&lt;/p&gt;

&lt;p&gt;The same week Telegram shipped bot-to-bot communication, a Georgia Tech study found that the best existing security framework for multi-agent systems covers only 65.3% of identified threat categories. Non-determinism and data leakage were the two most under-addressed risk domains.&lt;/p&gt;

&lt;p&gt;A separate study from the Cooperative AI Foundation identified three structural failure modes specific to multi-agent architectures: miscoordination, conflict, and collusion. One compromised agent can cascade through trust relationships across an entire network.&lt;/p&gt;

&lt;p&gt;Telegram's mutual opt-in is a start. But opt-in doesn't solve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Message integrity verification between agents&lt;/li&gt;
&lt;li&gt;Rate limiting per agent pair&lt;/li&gt;
&lt;li&gt;Payload schema validation&lt;/li&gt;
&lt;li&gt;Audit trails for compliance&lt;/li&gt;
&lt;li&gt;Credential scoping per conversation
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// rosud-call: built-in security primitives&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;secureChannel&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;RosudCall&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;finance-bot&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;token&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;ROSUD_TOKEN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;security&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;verifyPeer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;           &lt;span class="c1"&gt;// Cryptographic identity check&lt;/span&gt;
    &lt;span class="na"&gt;maxMessagesPerMinute&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// Rate limiting per peer&lt;/span&gt;
    &lt;span class="na"&gt;schemaValidation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="c1"&gt;// Reject malformed payloads&lt;/span&gt;
    &lt;span class="na"&gt;auditLog&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;              &lt;span class="c1"&gt;// Every message logged&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Only accept messages from verified agents&lt;/span&gt;
&lt;span class="nx"&gt;secureChannel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;message&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;msg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// msg.verified === true means cryptographic proof of sender&lt;/span&gt;
  &lt;span class="c1"&gt;// msg.auditId links to immutable log entry&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;verified&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nf"&gt;processPaymentRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&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;Limitation 3: No Observability by Default&lt;/p&gt;

&lt;p&gt;Telegram mentions that users "who choose to watch can observe bot-to-bot conversations." That's consumer-grade visibility. Enterprise multi-agent systems need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Message latency metrics per agent pair&lt;/li&gt;
&lt;li&gt;Failure rate tracking with automatic retry&lt;/li&gt;
&lt;li&gt;Dead letter queues for undeliverable messages&lt;/li&gt;
&lt;li&gt;Circuit breakers when downstream agents are unhealthy&lt;/li&gt;
&lt;li&gt;Distributed tracing across multi-hop agent chains&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't nice-to-haves. When your procurement agent delegates to an inventory agent, which delegates to a supplier agent, and the chain fails silently at hop three, you need infrastructure-level observability to diagnose it.&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="c1"&gt;// rosud-call: observability built into the SDK&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;channel&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;RosudCall&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;orchestrator&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;token&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;ROSUD_TOKEN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;observability&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;tracing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// Distributed trace IDs across hops&lt;/span&gt;
    &lt;span class="na"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// Latency, throughput, error rates&lt;/span&gt;
    &lt;span class="na"&gt;deadLetterQueue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="c1"&gt;// Capture failed deliveries&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Send with delivery guarantees&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;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;supplier-agent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;          &lt;span class="c1"&gt;// 5s deadline&lt;/span&gt;
  &lt;span class="na"&gt;retries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;             &lt;span class="c1"&gt;// Automatic retry on failure&lt;/span&gt;
  &lt;span class="na"&gt;circuitBreaker&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;         &lt;span class="c1"&gt;// Open after 5 consecutive failures&lt;/span&gt;
    &lt;span class="na"&gt;resetAfter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30000&lt;/span&gt;     &lt;span class="c1"&gt;// Try again after 30s&lt;/span&gt;
  &lt;span class="p"&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="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Message is in dead letter queue&lt;/span&gt;
  &lt;span class="c1"&gt;// Alert, fallback, or escalate&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;escalateToHuman&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;deadLetterId&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 Real Question&lt;/p&gt;

&lt;p&gt;Telegram opening bot-to-bot communication validates the market. Over 10 million bots can now form networks on a billion-user platform. That's real.&lt;/p&gt;

&lt;p&gt;But production multi-agent systems don't live inside a single messaging app. They span platforms, clouds, and custom infrastructure. They need security primitives that go beyond opt-in. They need observability that goes beyond "users can watch."&lt;/p&gt;

&lt;p&gt;The protocol layer (A2A, MCP) tells agents how to discover each other. The platform layer (Telegram, Slack) gives them a place to exist. The SDK layer makes sure messages actually arrive, securely, with proof.&lt;/p&gt;

&lt;p&gt;That's what &lt;a href="https://www.rosud.com/rosud-call" rel="noopener noreferrer"&gt;rosud-call&lt;/a&gt; does. One npm install. Platform-independent. Security and observability built in. No lock-in to any single messaging platform.&lt;br&gt;
&lt;/p&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;rosud-call
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Telegram opened the door. Now build something that works everywhere the door leads.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Kavin Kim builds payment and communication infrastructure for AI agents at &lt;a href="https://www.rosud.com" rel="noopener noreferrer"&gt;Rosud&lt;/a&gt;. Previously: 15 years designing global payment systems processing cross-border transactions across 172 countries.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>messaging</category>
      <category>sdk</category>
    </item>
    <item>
      <title>72% of Enterprises Think They Control Their AI. Ask Them What Their Agents Are Spending.</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Tue, 19 May 2026 06:04:02 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/72-of-enterprises-think-they-control-their-ai-ask-them-what-their-agents-are-spending-582c</link>
      <guid>https://dev.to/kavinkimcreator/72-of-enterprises-think-they-control-their-ai-ask-them-what-their-agents-are-spending-582c</guid>
      <description>&lt;p&gt;A VentureBeat survey of 40 enterprise organizations published in Q1 2026 found that 72% of enterprises believe they have meaningful control over their AI deployments. They have dashboards. They have policies. They have vendor contracts with safety clauses.&lt;/p&gt;

&lt;p&gt;Ask them one question and the illusion breaks: what did your AI agents spend this week?&lt;/p&gt;

&lt;p&gt;Silence.&lt;/p&gt;

&lt;p&gt;Enterprise AI governance in 2026 has a systematic blind spot. Everyone is watching what agents say, what data they access, which models they call. Nobody is watching what they spend. And in a world where agents are increasingly authorized to make purchases, call paid APIs, and process transactions, that blind spot is a financial risk that compounds quietly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shadow AI Became Shadow Spending
&lt;/h2&gt;

&lt;p&gt;Retool's 2026 Build vs. Buy Shift report surveyed 817 professionals and found that 60% of enterprise builders had created AI tools and workflows without IT oversight. A quarter of them did this frequently.&lt;/p&gt;

&lt;p&gt;These tools were connected to production data. They were running automated workflows. They had API keys.&lt;/p&gt;

&lt;p&gt;Now consider: many of those same tools are calling external APIs. Some are calling paid APIs. Some are triggering purchases, processing invoices, or executing micro-transactions in automated pipelines.&lt;/p&gt;

&lt;p&gt;The governance layer that was supposed to audit these actions? It was never built for the payment surface.&lt;/p&gt;

&lt;p&gt;Mass General Brigham, with 90,000 employees, had to build a custom security layer on top of Microsoft Copilot because the platform's native governance could not account for the real-world workflows running on top of it. The same gap exists at nearly every enterprise running multiple AI platforms simultaneously.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Three Governance Failures
&lt;/h2&gt;

&lt;p&gt;When we map enterprise AI governance onto payment workflows, three failure modes emerge consistently.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Credential Sprawl
&lt;/h3&gt;

&lt;p&gt;An agent that calls OpenAI, Anthropic, a third-party data enrichment API, and a payment processor is using four separate credential chains. Each one has different scope, different expiry, different audit trail. The IT team sees none of it as a single coherent spend profile.&lt;/p&gt;

&lt;p&gt;Result: you cannot answer the question 'what did our AI cost us this month' with any accuracy.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Budget Without Enforcement
&lt;/h3&gt;

&lt;p&gt;Most enterprise AI budget controls exist at the procurement level. A team is allocated $10,000 for AI APIs. But at the agent execution level, there is no real-time enforcement. An agent can exceed the monthly budget in a day of unexpected behavior, and the budget owner finds out three weeks later on the invoice.&lt;/p&gt;

&lt;p&gt;Result: cost surprises that feel like infrastructure failures.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Audit Trail Gaps
&lt;/h3&gt;

&lt;p&gt;When something goes wrong and an agent made an unauthorized or erroneous payment, reconstructing what happened is extremely difficult. API logs exist in silos across different vendors. The agent's decision context is separate from the transaction record. Compliance teams cannot establish a clear chain of custody.&lt;/p&gt;

&lt;p&gt;Result: regulatory exposure that increases as agent autonomy increases.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Real-Time Payment Governance Looks Like
&lt;/h2&gt;

&lt;p&gt;The solution is not more dashboards. It is moving payment authorization infrastructure outside the agent layer entirely.&lt;/p&gt;

&lt;p&gt;When an agent's payment credentials are scoped at issuance, the governance problem changes shape. Instead of monitoring what agents are spending after the fact, you define what they are allowed to spend before execution begins.&lt;/p&gt;

&lt;p&gt;Here is what that looks like in practice with rosud-pay:&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="c1"&gt;// Issue a scoped payment credential for an agent&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;credential&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;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;credentials&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;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;procurement-agent-prod&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;maxAmount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;dailyLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;allowedDomains&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;api.openai.com&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;api.anthropic.com&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;data.clearbit.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;requireApproval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;above&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;expiresIn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;7d&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="c1"&gt;// Any attempt to pay outside the defined scope is rejected at infrastructure level&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The credential itself encodes governance. There is no separate monitoring system to build. The constraint is enforced at the infrastructure level, not the application level.&lt;/p&gt;

&lt;p&gt;This matters because of a core security principle: if your agent generates the payment authorization logic, it could also manipulate that logic. Governance must live in a layer the agent cannot modify.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing the Audit Trail Gap
&lt;/h2&gt;

&lt;p&gt;Real-time enforcement is one half of the problem. Auditability is the other.&lt;/p&gt;

&lt;p&gt;rosud-pay records every payment event with the agent identity, the credential scope, the transaction context, and a timestamp. This means that when compliance asks what happened, you have a structured record that maps AI decisions to financial outcomes.&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="c1"&gt;// Query the spend audit trail for a specific agent&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;auditLog&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;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;history&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="s2"&gt;procurement-agent-prod&lt;/span&gt;&lt;span class="dl"&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-04-01&lt;/span&gt;&lt;span class="dl"&gt;"&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;2026-04-25&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;structured&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: totalSpend, currency, per-transaction records&lt;/span&gt;
&lt;span class="c1"&gt;// Each record maps: agentDecision -&amp;gt; vendor -&amp;gt; amount -&amp;gt; timestamp&lt;/span&gt;
&lt;span class="c1"&gt;// No manual reconciliation required&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the governance infrastructure that enterprise AI deployments are missing. Not a policy document. Not a vendor audit. A real-time, scoped, auditable payment layer that operates at the infrastructure level.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 72% Problem Is Actually a Measurement Problem
&lt;/h2&gt;

&lt;p&gt;The VentureBeat survey did not find that enterprises are reckless. It found that enterprises are measuring the wrong things. They count model calls. They track prompt costs. They monitor data access.&lt;/p&gt;

&lt;p&gt;They are not measuring the financial actions their agents are taking autonomously.&lt;/p&gt;

&lt;p&gt;As agent capabilities expand and autonomous spending becomes normalized, the governance frameworks that enterprises are building today will have systematic gaps where payment flows are concerned. The organizations that close that gap now will have a significant advantage when regulators begin requiring it.&lt;/p&gt;

&lt;p&gt;rosud-pay is the infrastructure layer that makes agent spending visible, constrained, and auditable. You can learn more at &lt;a href="https://www.rosud.com/rosud-pay" rel="noopener noreferrer"&gt;rosud.com/rosud-pay&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>payments</category>
      <category>security</category>
      <category>enterprise</category>
    </item>
    <item>
      <title>Why Agent Payment Authorization Cannot Come from the Agent Itself</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Tue, 19 May 2026 06:03:18 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/why-agent-payment-authorization-cannot-come-from-the-agent-itself-p86</link>
      <guid>https://dev.to/kavinkimcreator/why-agent-payment-authorization-cannot-come-from-the-agent-itself-p86</guid>
      <description>&lt;p&gt;There is a moment in security design when a single observation changes everything. NanoClaw 2.0 shipped recently with a capability that stops most developers cold: a gateway that intercepts API credentials before they reach the agent. The agent sees only a placeholder. The real key never touches the application layer.&lt;/p&gt;

&lt;p&gt;The founder explained the reason in one sentence: "If the agent generates the approval UI, it could swap the Accept and Reject buttons."&lt;/p&gt;

&lt;p&gt;Read that again. If the agent controls the authorization interface, the agent controls the authorization decision. The entire concept of checking with the agent before proceeding collapses when the agent is both the actor and the approver. This insight applies directly to payments. More directly than most developers realize.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Authorization Paradox
&lt;/h2&gt;

&lt;p&gt;When AI agents make payments through application-level controls, the execution flow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agent decides to make a payment&lt;/li&gt;
&lt;li&gt;Agent checks its own spending rules&lt;/li&gt;
&lt;li&gt;Agent approves or rejects&lt;/li&gt;
&lt;li&gt;Agent executes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You have just asked the agent to audit itself. The guardrails live inside the same process that generated the intention to spend. This is not security. It is theater.&lt;/p&gt;

&lt;p&gt;Real-world consequences are not theoretical. In April 2026, a Meta internal agent posted to employee forums without authorization after misinterpreting a task. The action was irreversible until discovered. A bad post can be deleted. A bad payment cannot be reversed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Infrastructure-Level Authorization Actually Means
&lt;/h2&gt;

&lt;p&gt;NanoClaw treats authorization as a layer that exists below the application. The agent cannot inspect or manipulate it. When the agent sends an action, the gateway intercepts, evaluates the policy, and either injects the real credential or rejects the request. The agent never touches the decision.&lt;/p&gt;

&lt;p&gt;The same architecture applies to payments in rosud-pay. Payment credentials are not stored in the agent. The agent holds a scoped token that defines what it can do: which merchants, what amounts, what frequency. When the agent initiates a payment, rosud-pay evaluates the token against the policy at the infrastructure layer. The agent's own logic is irrelevant to the authorization decision.&lt;/p&gt;

&lt;p&gt;Here is what that looks like in practice:&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="c1"&gt;// Agent receives a scoped payment token at deployment time&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="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RosudAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;paymentToken&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;ROSUD_SCOPED_TOKEN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// Token is pre-configured with: maxAmount, allowedMerchants, spendWindow&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Agent initiates payment -- authorization happens outside agent logic&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;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pay&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="s1"&gt;vendor-123&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.50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;USDC&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;API call to data provider&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// If policy is violated, result.authorized === false&lt;/span&gt;
&lt;span class="c1"&gt;// Agent cannot override this&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authorized&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Payment rejected by infrastructure policy:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// e.g. "exceeds spendWindow limit" or "merchant not in allowList"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent never sees the underlying USDC wallet. It never accesses the cryptographic signing keys. It cannot construct a payment outside the defined scope. Even if the agent's reasoning is compromised by a prompt injection attack, the payment rail does not move.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Payments Are Harder Than API Access
&lt;/h2&gt;

&lt;p&gt;NanoClaw's design protects API credentials. rosud-pay protects something harder: real monetary value on-chain.&lt;/p&gt;

&lt;p&gt;When an agent calls an API incorrectly, you get a failed request. You retry. You fix the logic. The cost is latency and compute. When an agent executes an unauthorized payment, you have moved USDC from one wallet to another. Stablecoin transactions on Base are final. There is no chargeback, no dispute window, no fraud team to call.&lt;/p&gt;

&lt;p&gt;The enterprise is beginning to understand this. Retool's 2026 developer survey found that 60% of enterprise AI tools were deployed without IT oversight. Shadow IT became shadow AI. The next step in that progression is shadow payment: agents making financial decisions that no human approved, in systems that no audit trail covers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pattern That Actually Works
&lt;/h2&gt;

&lt;p&gt;The architecture is straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Payment authorization lives at the infrastructure layer, not in the agent&lt;/li&gt;
&lt;li&gt;Agents receive scoped tokens with defined limits (merchant, amount, time window)&lt;/li&gt;
&lt;li&gt;Every payment attempt logs to an immutable audit trail before execution&lt;/li&gt;
&lt;li&gt;Limits are enforced cryptographically, not by trusting the agent's self-reported behavior
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Define the token scope at deployment, not at runtime&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;scopedToken&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;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createAgentToken&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;procurement-agent-v2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;policy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;maxSinglePayment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// USDC&lt;/span&gt;
    &lt;span class="na"&gt;dailySpendLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// USDC&lt;/span&gt;
    &lt;span class="na"&gt;allowedMerchants&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;data-provider-a&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="s1"&gt;api-service-b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;expiresIn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;7d&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="c1"&gt;// Deploy agent with token -- agent never sees the private key&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;deployAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;paymentToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;scopedToken&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// All payment attempts log automatically before execution&lt;/span&gt;
&lt;span class="c1"&gt;// Violations are rejected at infrastructure level&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not about distrusting your agents. It is about recognizing that an agent's authorization boundary should be established at deployment time, not derived from the agent's in-context judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Line That Should Not Move
&lt;/h2&gt;

&lt;p&gt;NanoClaw proved the principle for API access. rosud-pay applies it where the stakes are highest: the moment an autonomous agent moves money.&lt;/p&gt;

&lt;p&gt;The rule is simple. An agent should never be the entity deciding whether the agent should pay. That decision belongs at a layer the agent cannot reach. The architecture for that layer already exists.&lt;/p&gt;

&lt;p&gt;If you are building autonomous agents that handle real transactions, rosud-pay is the infrastructure-level payment authorization layer your agents need. The docs are at &lt;a href="https://www.rosud.com/docs" rel="noopener noreferrer"&gt;rosud.com/docs&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>payments</category>
      <category>security</category>
      <category>javascript</category>
    </item>
    <item>
      <title>72% of Enterprises Think They Control Their AI. Ask Them What Their Agents Are Spending.</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Tue, 19 May 2026 04:35:45 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/72-of-enterprises-think-they-control-their-ai-ask-them-what-their-agents-are-spending-5bcm</link>
      <guid>https://dev.to/kavinkimcreator/72-of-enterprises-think-they-control-their-ai-ask-them-what-their-agents-are-spending-5bcm</guid>
      <description>&lt;p&gt;A VentureBeat survey of 40 enterprise organizations published in Q1 2026 found that 72% of enterprises believe they have meaningful control over their AI deployments. They have dashboards. They have policies. They have vendor contracts with safety clauses.&lt;/p&gt;

&lt;p&gt;Ask them one question and the illusion breaks: what did your AI agents spend this week?&lt;/p&gt;

&lt;p&gt;Silence.&lt;/p&gt;

&lt;p&gt;Enterprise AI governance in 2026 has a systematic blind spot. Everyone is watching what agents say, what data they access, which models they call. Nobody is watching what they spend. And in a world where agents are increasingly authorized to make purchases, call paid APIs, and process transactions, that blind spot is a financial risk that compounds quietly.&lt;/p&gt;

&lt;p&gt;Shadow AI Became Shadow Spending&lt;/p&gt;

&lt;p&gt;Retool's 2026 Build vs. Buy Shift report surveyed 817 professionals and found that 60% of enterprise builders had created AI tools and workflows without IT oversight. A quarter of them did this frequently.&lt;/p&gt;

&lt;p&gt;These tools were connected to production data. They were running automated workflows. They had API keys.&lt;/p&gt;

&lt;p&gt;Now consider: many of those same tools are calling external APIs. Some are calling paid APIs. Some are triggering purchases, processing invoices, or executing micro-transactions in automated pipelines.&lt;/p&gt;

&lt;p&gt;The governance layer that was supposed to audit these actions? It was never built for the payment surface.&lt;/p&gt;

&lt;p&gt;Mass General Brigham, with 90,000 employees, had to build a custom security layer on top of Microsoft Copilot because the platform's native governance could not account for the real-world workflows running on top of it. The same gap exists at nearly every enterprise running multiple AI platforms simultaneously.&lt;/p&gt;

&lt;p&gt;The Three Governance Failures&lt;/p&gt;

&lt;p&gt;When we map enterprise AI governance onto payment workflows, three failure modes emerge consistently.&lt;/p&gt;

&lt;h1&gt;
  
  
  1. Credential Sprawl
&lt;/h1&gt;

&lt;p&gt;An agent that calls OpenAI, Anthropic, a third-party data enrichment API, and a payment processor is using four separate credential chains. Each one has different scope, different expiry, different audit trail. The IT team sees none of it as a single coherent spend profile.&lt;/p&gt;

&lt;p&gt;Result: you cannot answer the question 'what did our AI cost us this month' with any accuracy.&lt;/p&gt;

&lt;h1&gt;
  
  
  2. Budget Without Enforcement
&lt;/h1&gt;

&lt;p&gt;Most enterprise AI budget controls exist at the procurement level. A team is allocated $10,000 for AI APIs. But at the agent execution level, there is no real-time enforcement. An agent can exceed the monthly budget in a day of unexpected behavior, and the budget owner finds out three weeks later on the invoice.&lt;/p&gt;

&lt;p&gt;Result: cost surprises that feel like infrastructure failures.&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Audit Trail Gaps
&lt;/h1&gt;

&lt;p&gt;When something goes wrong and an agent made an unauthorized or erroneous payment, reconstructing what happened is extremely difficult. API logs exist in silos across different vendors. The agent's decision context is separate from the transaction record. Compliance teams cannot establish a clear chain of custody.&lt;/p&gt;

&lt;p&gt;Result: regulatory exposure that increases as agent autonomy increases.&lt;/p&gt;

&lt;p&gt;What Real-Time Payment Governance Looks Like&lt;/p&gt;

&lt;p&gt;The solution is not more dashboards. It is moving payment authorization infrastructure outside the agent layer entirely.&lt;/p&gt;

&lt;p&gt;When an agent's payment credentials are scoped at issuance, the governance problem changes shape. Instead of monitoring what agents are spending after the fact, you define what they are allowed to spend before execution begins.&lt;/p&gt;

&lt;p&gt;Here is what that looks like in practice with rosud-pay:&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="c1"&gt;// Issue a scoped payment credential for an agent&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;credential&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;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;credentials&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;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;procurement-agent-prod&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;maxAmount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;dailyLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;allowedDomains&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;api.openai.com&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;api.anthropic.com&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;data.clearbit.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;requireApproval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;above&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;expiresIn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;7d&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="c1"&gt;// Any attempt to pay outside the defined scope is rejected at infrastructure level&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The credential itself encodes governance. There is no separate monitoring system to build. The constraint is enforced at the infrastructure level, not the application level.&lt;/p&gt;

&lt;p&gt;This matters because of a core security principle: if your agent generates the payment authorization logic, it could also manipulate that logic. Governance must live in a layer the agent cannot modify.&lt;/p&gt;

&lt;p&gt;Closing the Audit Trail Gap&lt;/p&gt;

&lt;p&gt;Real-time enforcement is one half of the problem. Auditability is the other.&lt;/p&gt;

&lt;p&gt;rosud-pay records every payment event with the agent identity, the credential scope, the transaction context, and a timestamp. This means that when compliance asks what happened, you have a structured record that maps AI decisions to financial outcomes.&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="c1"&gt;// Query the spend audit trail for a specific agent&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;auditLog&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;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;history&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="s2"&gt;procurement-agent-prod&lt;/span&gt;&lt;span class="dl"&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-04-01&lt;/span&gt;&lt;span class="dl"&gt;"&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;2026-04-25&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;structured&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: totalSpend, currency, per-transaction records&lt;/span&gt;
&lt;span class="c1"&gt;// Each record maps: agentDecision -&amp;gt; vendor -&amp;gt; amount -&amp;gt; timestamp&lt;/span&gt;
&lt;span class="c1"&gt;// No manual reconciliation required&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the governance infrastructure that enterprise AI deployments are missing. Not a policy document. Not a vendor audit. A real-time, scoped, auditable payment layer that operates at the infrastructure level.&lt;/p&gt;

&lt;p&gt;The 72% Problem Is Actually a Measurement Problem&lt;/p&gt;

&lt;p&gt;The VentureBeat survey did not find that enterprises are reckless. It found that enterprises are measuring the wrong things. They count model calls. They track prompt costs. They monitor data access.&lt;/p&gt;

&lt;p&gt;They are not measuring the financial actions their agents are taking autonomously.&lt;/p&gt;

&lt;p&gt;As agent capabilities expand and autonomous spending becomes normalized, the governance frameworks that enterprises are building today will have systematic gaps where payment flows are concerned. The organizations that close that gap now will have a significant advantage when regulators begin requiring it.&lt;/p&gt;

&lt;p&gt;rosud-pay is the infrastructure layer that makes agent spending visible, constrained, and auditable. You can learn more at &lt;a href="https://www.rosud.com/rosud-pay" rel="noopener noreferrer"&gt;https://www.rosud.com/rosud-pay&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Key Takeaways&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;72% of enterprises believe they control their AI, but few have visibility into what agents are spending&lt;/li&gt;
&lt;li&gt;Shadow AI created shadow spending: 60% of enterprise builders created tools without IT oversight&lt;/li&gt;
&lt;li&gt;Real payment governance requires scoped credentials enforced at the infrastructure level&lt;/li&gt;
&lt;li&gt;Audit trails must map AI decisions to financial outcomes, not just API call logs&lt;/li&gt;
&lt;li&gt;rosud-pay provides the spending governance layer that enterprise AI deployments are missing&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>enterprise</category>
      <category>governance</category>
      <category>payments</category>
    </item>
    <item>
      <title>Why Agent Payment Authorization Cannot Come from the Agent Itself</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Tue, 19 May 2026 04:35:37 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/why-agent-payment-authorization-cannot-come-from-the-agent-itself-2h3e</link>
      <guid>https://dev.to/kavinkimcreator/why-agent-payment-authorization-cannot-come-from-the-agent-itself-2h3e</guid>
      <description>&lt;p&gt;There is a moment in security design when a single observation changes everything. NanoClaw 2.0 shipped recently with a capability that stops most developers cold: a gateway that intercepts API credentials before they reach the agent. The agent sees only a placeholder. The real key never touches the application layer.&lt;/p&gt;

&lt;p&gt;The founder explained the reason in one sentence: "If the agent generates the approval UI, it could swap the Accept and Reject buttons."&lt;/p&gt;

&lt;p&gt;Read that again. If the agent controls the authorization interface, the agent controls the authorization decision. The concept of checking with the agent before proceeding collapses when the agent is both the actor and the approver. This applies directly to payments. More directly than most developers realize.&lt;/p&gt;

&lt;p&gt;The Authorization Paradox&lt;/p&gt;

&lt;p&gt;When AI agents make payments through application-level controls, the execution flow looks like this:&lt;/p&gt;

&lt;p&gt;You have just asked the agent to audit itself. The guardrails live inside the same process that generated the intention to spend. This is not security. It is theater.&lt;/p&gt;

&lt;p&gt;The consequences are not theoretical. In 2026, a Meta internal agent posted to employee forums without authorization after misinterpreting a task. This triggered a Severity 1 security incident. A bad post can be deleted. A bad payment cannot be reversed. Stablecoin transactions on Base are final.&lt;/p&gt;

&lt;p&gt;What Infrastructure-Level Authorization Actually Means&lt;/p&gt;

&lt;p&gt;NanoClaw treats authorization as a layer that exists below the application. The agent cannot inspect or manipulate it. When the agent sends an action, the gateway intercepts, evaluates the policy, and either injects the real credential or rejects the request. The agent never touches the decision.&lt;/p&gt;

&lt;p&gt;The same architecture applies to payments in rosud-pay. Payment credentials are not stored in the agent. The agent holds a scoped token that defines what it can do: which merchants, what amounts, what frequency. When the agent initiates a payment, rosud-pay evaluates the token against the policy at the infrastructure layer. The agent's own logic is irrelevant to the authorization decision.&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="c1"&gt;// Agent receives a scoped payment token at deployment time&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="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RosudAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;paymentToken&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;ROSUD_SCOPED_TOKEN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// Token pre-configured: maxAmount, allowedMerchants, spendWindow&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Agent initiates payment -- authorization happens at infrastructure layer&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;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pay&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="s1"&gt;vendor-123&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.50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;USDC&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;API call to data provider&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Agent cannot override a policy rejection&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authorized&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Payment rejected:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// e.g. "exceeds spendWindow limit" or "merchant not in allowList"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent never sees the underlying USDC wallet. It never accesses the cryptographic signing keys. It cannot construct a payment outside the defined scope. Even if the agent's reasoning is compromised by a prompt injection attack, the payment rail does not move.&lt;/p&gt;

&lt;p&gt;Why Payments Are Harder Than API Access&lt;/p&gt;

&lt;p&gt;NanoClaw's design protects API credentials. rosud-pay protects something harder: real monetary value on-chain.&lt;/p&gt;

&lt;p&gt;When an agent calls an API incorrectly, you get a failed request. You retry. You fix the logic. The cost is latency and compute. When an agent executes an unauthorized payment, you have moved USDC from one wallet to another. There is no chargeback, no dispute window, no fraud team to call.&lt;/p&gt;

&lt;p&gt;The enterprise is beginning to understand this. Retool's 2026 developer survey found that 60% of enterprise AI tools were deployed without IT oversight. Shadow IT became shadow AI. The next step in that progression is shadow payment: agents making financial decisions that no human approved and no audit trail covers.&lt;/p&gt;

&lt;p&gt;The Pattern That Actually Works&lt;/p&gt;

&lt;p&gt;The architecture is straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Payment authorization lives at the infrastructure layer, not inside the agent&lt;/li&gt;
&lt;li&gt;Agents receive scoped tokens with defined limits: merchant, amount, time window&lt;/li&gt;
&lt;li&gt;Every payment attempt is logged to an immutable audit trail before execution&lt;/li&gt;
&lt;li&gt;Limits are enforced cryptographically, not by trusting the agent's self-reported behavior
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Define the token scope at deployment, not at runtime&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;scopedToken&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;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createAgentToken&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;procurement-agent-v2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;policy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;maxSinglePayment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// USDC&lt;/span&gt;
    &lt;span class="na"&gt;dailySpendLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// USDC&lt;/span&gt;
    &lt;span class="na"&gt;allowedMerchants&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;data-provider-a&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="s1"&gt;api-service-b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;expiresIn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;7d&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="c1"&gt;// Deploy agent with token -- agent never sees the private key&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;deployAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;paymentToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;scopedToken&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// All payment attempts are logged and enforced at infrastructure level&lt;/span&gt;
&lt;span class="c1"&gt;// Violations are rejected before execution, not after&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not about distrusting your agents. It is about recognizing that an agent's authorization boundary should be established at deployment time, not derived from the agent's in-context judgment.&lt;/p&gt;

&lt;p&gt;The Line That Should Not Move&lt;/p&gt;

&lt;p&gt;NanoClaw proved the principle for API access. rosud-pay applies it where the stakes are highest: the moment an autonomous agent moves money.&lt;/p&gt;

&lt;p&gt;The rule is simple. An agent should never be the entity deciding whether the agent should pay. That decision belongs at a layer the agent cannot reach.&lt;/p&gt;

&lt;p&gt;If you are building autonomous agents that handle real transactions, rosud-pay is the infrastructure-level payment authorization layer designed for exactly this. The full documentation is at rosud.com/docs.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>payments</category>
      <category>agents</category>
    </item>
    <item>
      <title>72% of Enterprises Think They Control Their AI. Ask Them What Their Agents Are Spending.</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Tue, 19 May 2026 02:46:13 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/72-of-enterprises-think-they-control-their-ai-ask-them-what-their-agents-are-spending-21fj</link>
      <guid>https://dev.to/kavinkimcreator/72-of-enterprises-think-they-control-their-ai-ask-them-what-their-agents-are-spending-21fj</guid>
      <description>&lt;p&gt;[Post #23 | rosud-pay | 2026-04-25 Draft | Focus: Enterprise AI Governance Gap + Payment Blind Spot]&lt;/p&gt;

&lt;h2&gt;
  
  
  The Governance Illusion
&lt;/h2&gt;

&lt;p&gt;A VentureBeat survey of 40 enterprise organizations published in Q1 2026 found that 72% of enterprises believe they have meaningful control over their AI deployments. They have dashboards. They have policies. They have vendor contracts with safety clauses.&lt;/p&gt;

&lt;p&gt;Ask them one question and the illusion breaks: what did your AI agents spend this week?&lt;/p&gt;

&lt;p&gt;Silence.&lt;/p&gt;

&lt;p&gt;Enterprise AI governance in 2026 has a systematic blind spot. Everyone is watching what agents say, what data they access, which models they call. Nobody is watching what they spend. And in a world where agents are increasingly authorized to make purchases, call paid APIs, and process transactions, that blind spot is a financial risk that compounds quietly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shadow AI Became Shadow Spending
&lt;/h2&gt;

&lt;p&gt;Retool's 2026 Build vs. Buy Shift report surveyed 817 professionals and found that 60% of enterprise builders had created AI tools and workflows without IT oversight. A quarter of them did this frequently.&lt;/p&gt;

&lt;p&gt;These tools were connected to production data. They were running automated workflows. They had API keys.&lt;/p&gt;

&lt;p&gt;Now consider: many of those same tools are calling external APIs. Some are calling paid APIs. Some are triggering purchases, processing invoices, or executing micro-transactions in automated pipelines.&lt;/p&gt;

&lt;p&gt;The governance layer that was supposed to audit these actions? It was never built for the payment surface.&lt;/p&gt;

&lt;p&gt;Mass General Brigham, with 90,000 employees, had to build a custom security layer on top of Microsoft Copilot because the platform's native governance could not account for the real-world workflows running on top of it. The same gap exists at nearly every enterprise running multiple AI platforms simultaneously.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Three Governance Failures
&lt;/h2&gt;

&lt;p&gt;When we map enterprise AI governance onto payment workflows, three failure modes emerge consistently.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Credential Sprawl
&lt;/h3&gt;

&lt;p&gt;An agent that calls OpenAI, Anthropic, a third-party data enrichment API, and a payment processor is using four separate credential chains. Each one has different scope, different expiry, different audit trail. The IT team sees none of it as a single coherent spend profile.&lt;/p&gt;

&lt;p&gt;Result: you cannot answer the question 'what did our AI cost us this month' with any accuracy.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Budget Without Enforcement
&lt;/h3&gt;

&lt;p&gt;Most enterprise AI budget controls exist at the procurement level. A team is allocated $10,000 for AI APIs. But at the agent execution level, there is no real-time enforcement. An agent can exceed the monthly budget in a day of unexpected behavior, and the budget owner finds out three weeks later on the invoice.&lt;/p&gt;

&lt;p&gt;Result: cost surprises that feel like infrastructure failures.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Audit Trail Gaps
&lt;/h3&gt;

&lt;p&gt;When something goes wrong and an agent made an unauthorized or erroneous payment, reconstructing what happened is extremely difficult. API logs exist in silos across different vendors. The agent's decision context is separate from the transaction record. Compliance teams cannot establish a clear chain of custody.&lt;/p&gt;

&lt;p&gt;Result: regulatory exposure that increases as agent autonomy increases.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Real-Time Payment Governance Looks Like
&lt;/h2&gt;

&lt;p&gt;The solution is not more dashboards. It is moving payment authorization infrastructure outside the agent layer entirely.&lt;/p&gt;

&lt;p&gt;When an agent's payment credentials are scoped at issuance, the governance problem changes shape. Instead of monitoring what agents are spending after the fact, you define what they are allowed to spend before execution begins.&lt;/p&gt;

&lt;p&gt;Here is what that looks like in practice with rosud-pay:&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="c1"&gt;// Issue a scoped payment credential for an agent&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;credential&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;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;credentials&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;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;procurement-agent-prod&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;maxAmount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;          &lt;span class="c1"&gt;// per-transaction cap in USDC&lt;/span&gt;
  &lt;span class="na"&gt;dailyLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// rolling 24h spend limit&lt;/span&gt;
  &lt;span class="na"&gt;allowedDomains&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;        &lt;span class="c1"&gt;// only these vendors can receive payment&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;api.openai.com&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;api.anthropic.com&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;data.clearbit.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;requireApproval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;above&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;             &lt;span class="c1"&gt;// human-in-the-loop for payments above $200&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;expiresIn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;7d&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// The agent receives only this credential, not your master key&lt;/span&gt;
&lt;span class="c1"&gt;// Any attempt to pay outside the defined scope is rejected at the infrastructure level&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The credential itself encodes governance. There is no separate monitoring system to build. The constraint is enforced at the infrastructure level, not the application level.&lt;/p&gt;

&lt;p&gt;This matters because of a core security principle: if your agent generates the payment authorization logic, it could also manipulate that logic. Governance must live in a layer the agent cannot modify.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing the Audit Trail Gap
&lt;/h2&gt;

&lt;p&gt;Real-time enforcement is one half of the problem. Auditability is the other.&lt;/p&gt;

&lt;p&gt;rosud-pay records every payment event with the agent identity, the credential scope, the transaction context, and a timestamp. This means that when compliance asks what happened, you have a structured record that maps AI decisions to financial outcomes.&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="c1"&gt;// Query the spend audit trail for a specific agent&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;auditLog&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;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;history&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="s2"&gt;procurement-agent-prod&lt;/span&gt;&lt;span class="dl"&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-04-01&lt;/span&gt;&lt;span class="dl"&gt;"&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;2026-04-25&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;structured&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="cm"&gt;/*
Example response:
{
  totalSpend: 1847.32,
  currency: "USDC",
  transactions: [
    {
      id: "txn_abc123",
      timestamp: "2026-04-18T09:14:22Z",
      vendor: "api.openai.com",
      amount: 12.40,
      agentDecision: "image generation for product catalog",
      approvedBy: "scoped-credential",
      status: "completed"
    }
  ]
}
*/&lt;/span&gt;

&lt;span class="c1"&gt;// The audit trail maps every payment to the agent decision context&lt;/span&gt;
&lt;span class="c1"&gt;// No manual reconciliation required&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the governance infrastructure that enterprise AI deployments are missing. Not a policy document. Not a vendor audit. A real-time, scoped, auditable payment layer that operates at the infrastructure level.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 72% Problem Is Actually a Measurement Problem
&lt;/h2&gt;

&lt;p&gt;The VentureBeat survey did not find that enterprises are reckless. It found that enterprises are measuring the wrong things. They count model calls. They track prompt costs. They monitor data access.&lt;/p&gt;

&lt;p&gt;They are not measuring the financial actions their agents are taking autonomously.&lt;/p&gt;

&lt;p&gt;As agent capabilities expand and autonomous spending becomes normalized, the governance frameworks that enterprises are building today will have systematic gaps where payment flows are concerned. The organizations that close that gap now will have a significant advantage when regulators begin requiring it.&lt;/p&gt;

&lt;p&gt;rosud-pay is the infrastructure layer that makes agent spending visible, constrained, and auditable. You can learn more at &lt;a href="https://www.rosud.com/rosud-pay" rel="noopener noreferrer"&gt;https://www.rosud.com/rosud-pay&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;72% of enterprises believe they control their AI, but few have visibility into what agents are spending&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Shadow AI created shadow spending: 60% of enterprise AI tools were built without IT oversight&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real payment governance requires scoped credentials, not post-hoc monitoring&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Audit trails must map AI decisions to financial outcomes at the infrastructure level, not the application level&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;rosud-pay provides the spending governance layer that enterprise AI deployments are missing&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;[Draft complete | Pending kavin approval before publish | No em dash verified]&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>enterprise</category>
      <category>fintech</category>
    </item>
    <item>
      <title>Why Agent Payment Authorization Cannot Come from the Agent Itself</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Tue, 19 May 2026 02:46:11 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/why-agent-payment-authorization-cannot-come-from-the-agent-itself-onl</link>
      <guid>https://dev.to/kavinkimcreator/why-agent-payment-authorization-cannot-come-from-the-agent-itself-onl</guid>
      <description>&lt;p&gt;There is a moment in security design when a single observation changes everything. NanoClaw 2.0 shipped recently with a capability that stops most developers cold: a gateway that intercepts API credentials before they reach the agent. The agent sees only a placeholder. The real key never touches the application layer.&lt;/p&gt;

&lt;p&gt;The founder explained the reason in one sentence: "If the agent generates the approval UI, it could swap the Accept and Reject buttons."&lt;/p&gt;

&lt;p&gt;Read that again. If the agent controls the authorization interface, the agent controls the authorization decision. The entire concept of checking with the agent before proceeding collapses when the agent is both the actor and the approver. This insight applies directly to payments. More directly than most developers realize.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Authorization Paradox
&lt;/h2&gt;

&lt;p&gt;When AI agents make payments through application-level controls, the execution flow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Agent decides to make a payment&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agent checks its own spending rules&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agent approves or rejects&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agent executes&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You have just asked the agent to audit itself. The guardrails live inside the same process that generated the intention to spend. This is not security. It is theater.&lt;/p&gt;

&lt;p&gt;Real-world consequences are not theoretical. In April 2026, a Meta internal agent posted to employee forums without authorization after misinterpreting a task. The action was irreversible until discovered. A bad post can be deleted. A bad payment cannot be reversed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Infrastructure-Level Authorization Actually Means
&lt;/h2&gt;

&lt;p&gt;NanoClaw treats authorization as a layer that exists below the application. The agent cannot inspect or manipulate it. When the agent sends an action, the gateway intercepts, evaluates the policy, and either injects the real credential or rejects the request. The agent never touches the decision.&lt;/p&gt;

&lt;p&gt;The same architecture applies to payments in &lt;a href="https://www.rosud.com/rosud-pay" rel="noopener noreferrer"&gt;rosud-pay&lt;/a&gt;. Payment credentials are not stored in the agent. The agent holds a scoped token that defines what it can do: which merchants, what amounts, what frequency. When the agent initiates a payment, rosud-pay evaluates the token against the policy at the infrastructure layer. The agent's own logic is irrelevant to the authorization decision.&lt;/p&gt;

&lt;p&gt;Here is what that looks like in practice:&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="c1"&gt;// Agent receives a scoped payment token at deployment time&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="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RosudAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;paymentToken&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;ROSUD_SCOPED_TOKEN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// Token is pre-configured with: maxAmount, allowedMerchants, spendWindow&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Agent initiates payment -- authorization happens outside agent logic&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;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pay&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="s1"&gt;vendor-123&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.50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;USDC&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;API call to data provider&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// If policy is violated, result.authorized === false&lt;/span&gt;
&lt;span class="c1"&gt;// Agent cannot override this&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authorized&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Payment rejected by infrastructure policy:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// e.g. "exceeds spendWindow limit" or "merchant not in allowList"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent never sees the underlying USDC wallet. It never accesses the cryptographic signing keys. It cannot construct a payment outside the defined scope. Even if the agent's reasoning is compromised by a prompt injection attack, the payment rail does not move.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Payments Are Harder Than API Access
&lt;/h2&gt;

&lt;p&gt;NanoClaw's design protects API credentials. rosud-pay protects something harder: real monetary value on-chain.&lt;/p&gt;

&lt;p&gt;When an agent calls an API incorrectly, you get a failed request. You retry. You fix the logic. The cost is latency and compute. When an agent executes an unauthorized payment, you have moved USDC from one wallet to another. Stablecoin transactions on Base are final. There is no chargeback, no dispute window, no fraud team to call.&lt;/p&gt;

&lt;p&gt;The enterprise is beginning to understand this. Retool's 2026 developer survey found that 60% of enterprise AI tools were deployed without IT oversight. Shadow IT became shadow AI. The next step in that progression is shadow payment: agents making financial decisions that no human approved, in systems that no audit trail covers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pattern That Actually Works
&lt;/h2&gt;

&lt;p&gt;The architecture is straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Payment authorization lives at the infrastructure layer, not in the agent&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agents receive scoped tokens with defined limits (merchant, amount, time window)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Every payment attempt logs to an immutable audit trail before execution&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Limits are enforced cryptographically, not by trusting the agent's self-reported behavior&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Define the token scope at deployment, not at runtime&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;scopedToken&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;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createAgentToken&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;procurement-agent-v2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;policy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;maxSinglePayment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// USDC&lt;/span&gt;
    &lt;span class="na"&gt;dailySpendLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// USDC&lt;/span&gt;
    &lt;span class="na"&gt;allowedMerchants&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;data-provider-a&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="s1"&gt;api-service-b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;expiresIn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;7d&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="c1"&gt;// Deploy agent with token -- agent never sees the private key&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;deployAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;paymentToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;scopedToken&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// All payment attempts log automatically before execution&lt;/span&gt;
&lt;span class="c1"&gt;// Violations are rejected at infrastructure level&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not about distrusting your agents. It is about recognizing that an agent's authorization boundary should be established at deployment time, not derived from the agent's in-context judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Line That Should Not Move
&lt;/h2&gt;

&lt;p&gt;NanoClaw proved the principle for API access. rosud-pay applies it where the stakes are highest: the moment an autonomous agent moves money.&lt;/p&gt;

&lt;p&gt;The rule is simple. An agent should never be the entity deciding whether the agent should pay. That decision belongs at a layer the agent cannot reach. The architecture for that layer already exists.&lt;/p&gt;

&lt;p&gt;If you are building autonomous agents that handle real transactions, &lt;a href="https://www.rosud.com/rosud-pay" rel="noopener noreferrer"&gt;rosud-pay&lt;/a&gt; is the infrastructure-level payment authorization layer your agents need. The docs are at &lt;a href="https://www.rosud.com/docs" rel="noopener noreferrer"&gt;rosud.com/docs&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>blockchain</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Anthropic Ran a Real Agent Economy Inside Their Company. Here's What It Proved About Communication.</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Sun, 26 Apr 2026 05:16:35 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/anthropic-ran-a-real-agent-economy-inside-their-company-heres-what-it-proved-about-communication-5h02</link>
      <guid>https://dev.to/kavinkimcreator/anthropic-ran-a-real-agent-economy-inside-their-company-heres-what-it-proved-about-communication-5h02</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3n320yw4h26q8lbacmo3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3n320yw4h26q8lbacmo3.png" alt="cover" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In December 2025, Anthropic ran an experiment called Project Deal. They gave 69 employees AI agents and set them loose on a Slack-based flea market. The agents could browse listings, negotiate, and complete transactions. No scripts. No hardcoded behaviors. Pure autonomous negotiation.&lt;/p&gt;

&lt;p&gt;The results: 186 completed deals. Over $4,000 in real goods exchanged. And a discovery that should keep every AI infrastructure builder up at night.&lt;/p&gt;

&lt;p&gt;Agents running on Claude Opus 4.5 consistently struck better deals than those running on Claude Haiku 4.5. The gap was not small. And the people paired with weaker agents had no idea they were losing out. They walked away satisfied, not knowing a better deal was possible.&lt;/p&gt;

&lt;p&gt;Anthropic proved that agents can negotiate. They can discover value, assess tradeoffs, and close transactions without a human in the loop. The experiment worked.&lt;/p&gt;

&lt;p&gt;But Slack was the communication channel. And that is the question Project Deal did not answer.&lt;/p&gt;

&lt;p&gt;Slack Was the Infrastructure. That Was Fine for 69 People.&lt;/p&gt;

&lt;p&gt;Slack gave agents a shared space to post offers, read responses, and confirm deals. It worked because the environment was controlled. Sixty-nine participants. A few hundred listings. Real-time channels that humans also used.&lt;/p&gt;

&lt;p&gt;Now imagine the same experiment at scale. Not 69 employees but 69,000 software agents running across different companies, cloud providers, and model vendors. The negotiation logic works. The infrastructure does not scale.&lt;/p&gt;

&lt;p&gt;Slack is built for humans. It has rate limits, workspace boundaries, message threading designed for human cognition, and no native concept of agent identity. An agent on Claude Opus in one company has no clean way to negotiate in real time with an agent on GPT-5 in another company, without someone building custom integration glue in between.&lt;/p&gt;

&lt;p&gt;Project Deal proved the negotiation intelligence exists. It surfaced the infrastructure gap around it.&lt;/p&gt;

&lt;p&gt;What Agent-Native Communication Looks Like&lt;/p&gt;

&lt;p&gt;When agents negotiate, they need to do three things that human messaging platforms were not designed to support at machine speed and scale.&lt;/p&gt;

&lt;p&gt;Broadcast an offer to a defined set of agents without routing through a human-readable inbox. Receive and process responses in real time, across platforms and model providers. Confirm or reject without a human approval step that breaks the autonomous loop.&lt;/p&gt;

&lt;p&gt;Here is what that looks like in practice using rosud-call, which lets any bot join an agent messaging network with a single npm install:&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="c1"&gt;// Procurement agent posting a service request to the network&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;RosudCall&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;rosud-call&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;agent&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;RosudCall&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;procurement-agent-v2&lt;/span&gt;&lt;span class="dl"&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;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;service.request&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;task&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data-enrichment&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;budget&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;volume&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;deadline&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;3600000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;replyTo&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;inboxId&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;offers&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;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;service.offer&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;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;minReplies&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&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;best&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;offers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&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;b&lt;/span&gt;&lt;span class="p"&gt;)&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;price&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&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;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="s2"&gt;`Accepted: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;best&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; at &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;best&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; USDC per 1k records`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The vendor side is equally simple:&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="c1"&gt;// Vendor agent listening for and responding to service requests&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;RosudCall&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;rosud-call&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;vendor&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;RosudCall&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;enrichment-vendor-agent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;vendor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;service.request&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data-enrichment&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ourPrice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculatePrice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;volume&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;vendor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replyTo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;service.offer&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;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ourPrice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;deliveryMs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1800000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;sla&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;99.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;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;vendor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;agentId&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 Model Strength Gap Becomes an Infrastructure Problem&lt;/p&gt;

&lt;p&gt;Project Deal revealed something subtle. When the weaker agent negotiated, its counterpart did not know. The information asymmetry was invisible at the human level.&lt;/p&gt;

&lt;p&gt;At scale, this becomes an infrastructure design question. rosud-call attaches verified agent metadata to every message, so a procurement agent knows it is receiving an offer from a counterparty with a 30-day track record on the network, not an unverified bot that just appeared.&lt;/p&gt;

&lt;p&gt;From 69 Employees to Millions of Agent Transactions&lt;/p&gt;

&lt;p&gt;Anthropic proved that autonomous agent economies work. The bottleneck in 2025 was model capability. That bottleneck is gone.&lt;/p&gt;

&lt;p&gt;The bottleneck now is communication infrastructure. That is precisely the gap rosud-call was built to fill. One npm install connects your agent to a network where other agents can discover it, send structured messages, and complete negotiations without your team writing custom integration code for every new counterparty.&lt;/p&gt;

&lt;p&gt;The Agent Economy Is Already Running. Is Your Agent on the Network?&lt;/p&gt;

&lt;p&gt;If you are building agents that should participate in a broader ecosystem, the infrastructure is ready.&lt;/p&gt;

&lt;p&gt;Explore the SDK and documentation at &lt;a href="https://www.rosud.com/rosud-call" rel="noopener noreferrer"&gt;rosud.com/rosud-call&lt;/a&gt;. Your agents can start talking to each other today.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agentai</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>When Your Agent Becomes a Consumer: The Payment Infrastructure No One Built</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Fri, 24 Apr 2026 01:45:15 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/when-your-agent-becomes-a-consumer-the-payment-infrastructure-no-one-built-2epm</link>
      <guid>https://dev.to/kavinkimcreator/when-your-agent-becomes-a-consumer-the-payment-infrastructure-no-one-built-2epm</guid>
      <description>&lt;h1&gt;
  
  
  Hook / Intro
&lt;/h1&gt;

&lt;p&gt;OpenAI released ChatGPT Images 2.0 last week. Anthropic shipped Claude Design. Google dropped Gemma 4 with on-device tool-calling. The model race is in full sprint.&lt;/p&gt;

&lt;p&gt;Here is what nobody is talking about: every one of those new capabilities is a purchase waiting to happen.&lt;/p&gt;

&lt;p&gt;When your agent calls the image generation API to produce an asset, it is buying a service. When it queries a real-time data provider, it is buying information. When it spins up compute on demand, it is buying infrastructure. The agent is no longer just a tool that costs you money. It is becoming a consumer that spends money on your behalf.&lt;/p&gt;

&lt;p&gt;And the payment infrastructure to support that? It was never built for this.&lt;/p&gt;

&lt;h1&gt;
  
  
  Section 1: The Agent-as-Consumer Pattern Is Already Here
&lt;/h1&gt;

&lt;p&gt;Consider what a production AI agent does in a single workflow today:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Calls a vision API to analyze an uploaded image&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Queries a financial data provider for real-time pricing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generates a visual report using an image model&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stores the output in a third-party document service&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these is a metered API call. Most of them cost money. The agent triggers all four without asking you. That is not a future scenario. That is a Tuesday.&lt;/p&gt;

&lt;p&gt;The problem is that your payment infrastructure was not designed for a non-human buyer. Credit cards require a cardholder. OAuth flows require a user session. Subscription plans assume a human who logs in once a month to check the bill. None of that maps to an agent that executes 400 tasks before you finish your morning coffee.&lt;/p&gt;

&lt;h1&gt;
  
  
  Section 2: Three Failure Modes When Agents Try to Pay
&lt;/h1&gt;

&lt;p&gt;Here are the three failure modes teams run into when agents start consuming paid services at scale:&lt;/p&gt;

&lt;h1&gt;
  
  
  Failure 1: The Shared Key Problem
&lt;/h1&gt;

&lt;p&gt;Most teams solve the payment problem by giving agents a shared API key tied to a company credit card. It works until it does not. One compromised agent, one runaway loop, one unexpected price change in an upstream API, and you are looking at a five-figure invoice with no audit trail to tell you which agent spent what.&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;# What most teams do today (the problematic pattern)
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="c1"&gt;# Single API key shared across ALL agents
&lt;/span&gt;&lt;span class="n"&gt;IMAGE_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SHARED_IMAGE_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;agent_generate_image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# No budget check. No agent identity. No spend limit.
&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;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://api.imageservice.com/generate&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;IMAGE_API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;json&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;prompt&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# If this agent loops 10,000 times... who notices?
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Failure 2: No Budget Boundary Between Agents
&lt;/h1&gt;

&lt;p&gt;When you run 10 agents concurrently, each calling different services, you have no way to see which agent drove which cost. Your cloud bill says $2,400 in API spend. Your team spent three hours reconstructing which workflow caused it. That is not a monitoring problem. That is an identity problem at the payment layer.&lt;/p&gt;

&lt;h1&gt;
  
  
  Failure 3: No Rate of Spend Control
&lt;/h1&gt;

&lt;p&gt;Human users self-regulate. They notice when something costs too much and stop. Agents do not. A misconfigured retry loop, a prompt injection that triggers excessive tool calls, a model that misinterprets a budget instruction: all of these can drain your payment credentials before any human-visible alert fires. By the time you see the anomaly, the transaction is irreversible.&lt;/p&gt;

&lt;h1&gt;
  
  
  Section 3: What Agent-Native Payment Infrastructure Actually Looks Like
&lt;/h1&gt;

&lt;p&gt;The fix is not a better credit card. It is a payment layer designed for non-human consumers from the ground up. Here is what that architecture requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agent-scoped credentials: each agent gets its own payment identity, not a shared key&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Spend limits at the credential level: the payment key itself cannot exceed a configured cap&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stablecoin settlement: USDC on-chain gives per-transaction visibility without relying on a credit statement&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real-time audit trail: every payment event tied to agent ID, task context, and timestamp&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the architecture rosud-pay is built around. Each agent gets a scoped credential with a hard spend limit. Payments settle in USDC. Every transaction is logged with full context. When something goes wrong, you know exactly which agent spent what, when, and on what service.&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="c1"&gt;// Agent-native payment with rosud-pay&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;RosudPay&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;rosud-pay&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;pay&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;RosudPay&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;image-gen-agent-v2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;spendLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;daily&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;perTx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;USDC&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;auditContext&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;taskId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;workflowId&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;agentGenerateImage&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="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// rosud-pay checks limit BEFORE the call goes out&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;approval&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;pay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preAuthorize&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;estimatedCost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.08&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="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;approval&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Budget exceeded: escalate, do not retry silently&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;spend_limit_reached&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;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;imageAPI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&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="c1"&gt;// Settle USDC and log the transaction&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;settle&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;txId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;approval&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;txId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;actualCost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&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;h1&gt;
  
  
  Section 4: Why USDC Changes the Visibility Equation
&lt;/h1&gt;

&lt;p&gt;Traditional payment rails batch and reconcile. By the time you can see what was spent, the transaction is days old and the context is gone. USDC on Base settles in seconds. Each transaction is on-chain, timestamped, and permanently associated with the agent credential that initiated it.&lt;/p&gt;

&lt;p&gt;This is not a crypto ideology argument. It is a practical engineering argument. When your agent is buying services at machine speed, you need a payment rail that gives you machine-speed visibility. Credit card statements are not that.&lt;/p&gt;

&lt;p&gt;The model race is accelerating agent capabilities faster than most teams can track. More capable agents will consume more services. The question is not whether your agents will become consumers. They already are. The question is whether your payment infrastructure was designed for them.&lt;/p&gt;

&lt;h1&gt;
  
  
  CTA
&lt;/h1&gt;

&lt;p&gt;If you are building production AI agents that call paid APIs, rosud-pay gives you scoped credentials, per-agent spend limits, and USDC settlement with a full audit trail. Learn more at &lt;a href="https://www.rosud.com/rosud-pay" rel="noopener noreferrer"&gt;https://www.rosud.com/rosud-pay&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>payments</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>When the Enterprise Opens Up to Agents, Who Coordinates Them?</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Wed, 22 Apr 2026 05:22:17 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/when-the-enterprise-opens-up-to-agents-who-coordinates-them-12a8</link>
      <guid>https://dev.to/kavinkimcreator/when-the-enterprise-opens-up-to-agents-who-coordinates-them-12a8</guid>
      <description>&lt;p&gt;Salesforce just opened 27 years of enterprise CRM to any AI agent. Headless 360 launched at TDX with over 60 MCP tools and 30 coding skills. Any agent built with Claude Code, OpenAI Agents SDK, or Cursor can now read, update, and trigger workflows inside Salesforce directly. SAP did the same. ServiceNow followed. Nvidia brought 17 enterprise partners onto Agent Toolkit. The message from every major platform in Q1 2026 is identical: the enterprise is now agent-accessible.&lt;/p&gt;

&lt;p&gt;This is a genuine inflection point. But it created a problem nobody is talking about.&lt;/p&gt;

&lt;p&gt;The agents can read the data. They can trigger workflows. They cannot coordinate with each other in real time.&lt;/p&gt;

&lt;p&gt;One Enterprise, Many Agents, Zero Shared Channel&lt;/p&gt;

&lt;p&gt;Here is what a real enterprise workflow looks like in 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Claude-based sales agent updates deal status in Salesforce&lt;/li&gt;
&lt;li&gt;An OpenAI-based inventory agent needs to check availability&lt;/li&gt;
&lt;li&gt;A Gemini-based finance agent needs to generate a quote&lt;/li&gt;
&lt;li&gt;A Claude Code-based fulfillment agent schedules delivery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These agents all have access to the enterprise platforms. But how does the sales agent tell the inventory agent that a deal just moved to negotiation? How does the finance agent know to generate a quote right now, not in 15 minutes when the orchestrator checks in?&lt;/p&gt;

&lt;p&gt;The answer, in most architectures today: it does not. The orchestrator polls. Agents wait. Workflows stall.&lt;/p&gt;

&lt;p&gt;The Polling Problem&lt;/p&gt;

&lt;p&gt;Traditional multi-agent setups handle this through a central orchestrator. Agent A finishes, writes to shared state, and the orchestrator eventually notices and triggers Agent B. This works when workflows are predictable and latency is acceptable. Enterprise-grade agent workflows are neither.&lt;/p&gt;

&lt;p&gt;A deal moving from prospecting to negotiation triggers an immediate cascade: inventory checks, legal review alerts, pricing updates, competitor analysis. Each needs to happen now, not on the next polling cycle. The orchestrator architecture was designed for sequential tasks. Real enterprise workflows are event-driven.&lt;/p&gt;

&lt;p&gt;What Real-Time Agent Coordination Looks Like&lt;/p&gt;

&lt;p&gt;The model is simple. When something meaningful happens, the detecting agent publishes an event. Every agent that cares about it receives the event immediately and acts. With rosud-call, this is a two-line integration:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;RosudClient&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;rosud-call&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;RosudClient&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;crm-agent-001&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Publish when a deal stage changes&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;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deal.stage.changed&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;dealId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;D-4892&lt;/span&gt;&lt;span class="dl"&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;prospecting&lt;/span&gt;&lt;span class="dl"&gt;'&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="s1"&gt;negotiation&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;timestamp&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="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The inventory agent does not need to know about the CRM agent. It subscribes to the event channel and reacts:&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="c1"&gt;// Inventory agent: react immediately to deal progress&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;subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deal.stage.changed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;dealId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;negotiation&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;availability&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;checkInventory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dealId&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;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;inventory.checked&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;dealId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;available&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;availability&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;units&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;leadTimeDays&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;availability&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;leadTime&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The finance agent subscribes to 'inventory.checked'. The fulfillment agent subscribes to 'quote.approved'. No orchestrator polling required for any of these handoffs.&lt;/p&gt;

&lt;p&gt;Why This Matters for Enterprise Adoption&lt;/p&gt;

&lt;p&gt;When Salesforce launched Headless 360, it described the product as making the entire platform accessible to external agents. That description is accurate. But accessible does not mean coordinated.&lt;/p&gt;

&lt;p&gt;In practice, most enterprise agent deployments fail not because agents cannot access data, but because they cannot coordinate their actions.&lt;/p&gt;

&lt;p&gt;This creates three problems that kill enterprise rollouts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Race conditions: two agents act on the same record without knowing about each other&lt;/li&gt;
&lt;li&gt;Stale context: Agent B acts on 10-minute-old information because the orchestrator has not checked in&lt;/li&gt;
&lt;li&gt;Invisible failures: Agent A finishes its task but nobody knows, so Agent B keeps waiting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Real-time event channels eliminate all three.&lt;/p&gt;

&lt;p&gt;npm install rosud-call&lt;/p&gt;

&lt;p&gt;The enterprise platforms have done the hard work of opening up their APIs. The agent coordination layer is the remaining gap.&lt;/p&gt;

&lt;p&gt;rosud-call connects any two agents with a single npm install. No broker to manage, no polling loops, no shared state database. Any agent that can run JavaScript can publish or subscribe to events. Platform does not matter. Model does not matter.&lt;/p&gt;

&lt;p&gt;As Salesforce Headless 360 deploys across enterprise customers, the question is not whether agents will work in the enterprise. The question is how they will work together.&lt;/p&gt;

&lt;p&gt;That is the problem rosud-call was built to solve.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.rosud.com/rosud-call" rel="noopener noreferrer"&gt;https://www.rosud.com/rosud-call&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>salesforce</category>
      <category>enterprise</category>
    </item>
    <item>
      <title>When AI Services Shut Down: Why Your Payment Layer Needs to Outlast Your Models</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Tue, 21 Apr 2026 04:32:00 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/when-ai-services-shut-down-why-your-payment-layer-needs-to-outlast-your-models-1fm7</link>
      <guid>https://dev.to/kavinkimcreator/when-ai-services-shut-down-why-your-payment-layer-needs-to-outlast-your-models-1fm7</guid>
      <description>&lt;p&gt;OpenAI Sora was shut down on March 24, 2026. No warning. No migration period. Just gone.&lt;/p&gt;

&lt;p&gt;If your agent was using Sora to generate video content and trigger downstream payments, that pipeline broke overnight. Not because your payment logic was wrong. Because the model it depended on ceased to exist.&lt;/p&gt;

&lt;p&gt;This is the fragility problem nobody talks about in agentic AI design.&lt;/p&gt;




&lt;p&gt;The Dependency Chain Problem&lt;/p&gt;

&lt;p&gt;Most AI agent payment architectures look like this:&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;# The fragile pattern
&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;process_agent_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Step 1: Call the AI model
&lt;/span&gt;    &lt;span class="n"&gt;video&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;openai_sora&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Step 2: Payment is tightly coupled to model output
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;completed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;payment_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;charge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;credits_used&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;PRICE_PER_CREDIT&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;sora-v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# Hardcoded model identity
&lt;/span&gt;        &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When Sora disappeared, every agent using this pattern had to stop, rewrite, and redeploy. The payment logic had nothing wrong with it. But because it was coupled to a specific model identifier, it became dead code.&lt;/p&gt;




&lt;p&gt;The Model Lifecycle Problem&lt;/p&gt;

&lt;p&gt;AI models do not follow the same lifecycle assumptions as databases or APIs. A PostgreSQL table you created in 2019 is still there. An S3 bucket from 2015 still works. But AI models:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Get deprecated without long notice windows&lt;/li&gt;
&lt;li&gt;Get replaced by successor models with different output schemas&lt;/li&gt;
&lt;li&gt;Get shut down entirely when unit economics do not work (Sora)&lt;/li&gt;
&lt;li&gt;Get renamed, versioned, or merged into new products&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When Sora shut down, developers who had hardcoded sora-v1 into their payment triggers had to scramble. Some had payment events tied to specific model completion webhooks. Those webhooks were now silent.&lt;/p&gt;




&lt;p&gt;What Model-Agnostic Payment Architecture Looks Like&lt;/p&gt;

&lt;p&gt;The fix is to separate the payment trigger from the model identity. Your payment layer should not care which model ran. It should care about what happened: a task completed, a resource was consumed, a result was delivered.&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;# The resilient pattern - model-agnostic payment scope
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AgentTask&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model_provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;task_id&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;model_provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model_provider&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;execute_with_payment&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;task_params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;payment_scope&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;agent_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;budget_limit_usd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;idempotency_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;task-&lt;/span&gt;&lt;span class="si"&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;task_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;payment_ctx&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="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;payment_ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;settle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                    &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cost_usd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;metadata&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;task_type&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="n"&gt;task_type&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
                    &lt;span class="c1"&gt;# No model name in payment logic - survives model changes
&lt;/span&gt;                &lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this pattern, you can swap Sora for Runway, or GPT-4o for Claude, or any model for any other, without touching payment logic. The payment layer is downstream of your routing logic, not upstream.&lt;/p&gt;




&lt;p&gt;Three Things That Need to Outlast Your Models&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Idempotency Keys&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If your agent retries a task after a model failure, you cannot charge twice. Idempotency must be at the payment layer, not the model layer.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Budget Scoping&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When Sora shut down and agents failed mid-task, some had partially consumed credits. Budget limits at the payment level let you cap exposure regardless of what the model does.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Audit Trails&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;"The model died" is not a sufficient explanation to your users if their account was charged. Payment records need to exist independently of model logs.&lt;/p&gt;

&lt;p&gt;Rosud handles all three. The agent identity, spending limits, and transaction records live in the payment layer, not inside any particular model's API response.&lt;/p&gt;




&lt;p&gt;The Bigger Pattern&lt;/p&gt;

&lt;p&gt;Sora is one example. But the pattern is structural. AI services will continue to appear, pivot, and shut down at a pace that traditional software infrastructure was not designed for.&lt;/p&gt;

&lt;p&gt;Google Gemini Ultra got repositioned. Meta's LLaMA terms changed overnight. GPT-4 got deprecated in favor of newer versions. Each of these created breaking changes for developers who had not designed their payment logic to be model-agnostic.&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;# Model routing stays in your orchestration layer
&lt;/span&gt;&lt;span class="n"&gt;MODEL_ROUTER&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;video_generation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;runway-gen3&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;kling-1.6&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;   &lt;span class="c1"&gt;# sora-v1 removed
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text_generation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-sonnet-4&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;gpt-4o&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;image_generation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sd-3.5-large&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;dall-e-3&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;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;route_and_pay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;available_models&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MODEL_ROUTER&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;task_type&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;available_models&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;result&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;call_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;record_transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;agent_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;agent_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                &lt;span class="n"&gt;task_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;task_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;model_used&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;cost_usd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cost&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;ModelUnavailableError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;continue&lt;/span&gt;

    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;AllModelsUnavailableError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;The Takeaway&lt;/p&gt;

&lt;p&gt;Build your payment layer like infrastructure. It should be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Model-agnostic: payments survive model deprecations&lt;/li&gt;
&lt;li&gt;Task-complete: triggered by outcomes, not by model identity&lt;/li&gt;
&lt;li&gt;Audit-capable: records exist independently of model logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OpenAI Sora shutting down was a supply-side event. Your payment infrastructure is demand-side. Keep them separate, and your agents keep running even when the models they depend on do not.&lt;/p&gt;

&lt;p&gt;Rosud is built for exactly this: a payment layer that does not care what model you use, only that the work was done and the transaction was clean.&lt;/p&gt;

&lt;p&gt;Try Rosud API at &lt;a href="https://rosud.com" rel="noopener noreferrer"&gt;rosud.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>payments</category>
      <category>agenticai</category>
      <category>infrastructure</category>
    </item>
  </channel>
</rss>
