<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>buidl_25.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Fri, 25 Sep 2026 11:44:24 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. buidl_25.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/buidl_25" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[x402 Payments on Arc Testnet: How an Agent Pays in USDC With No Facilitator — 퍼실리테이터 없이 USDC로 결제하는 AI 에이전트]]></title>
            <link>https://velog.io/@buidl_25/x402-Payments-on-Arc-Testnet-Self-Settle</link>
            <guid>https://velog.io/@buidl_25/x402-Payments-on-Arc-Testnet-Self-Settle</guid>
            <pubDate>Fri, 25 Sep 2026 11:44:24 GMT</pubDate>
            <description><![CDATA[<p>클래식 x402에서는 구매자와 판매자 사이에 퍼실리테이터가 있습니다. Arc에서는 이를 생략했습니다 — 에이전트가 EIP-3009 서명 후 스스로 트랜잭션을 전송하는 self-settle 방식입니다. 가스비도 USDC라서 하나의 자산으로 결제와 수수료를 모두 처리합니다.</p>
<hr>
<p>In classic x402, a <strong>facilitator</strong> sits between the buyer and the seller: it takes the agent&#39;s signature and broadcasts the transaction on its behalf. Convenient — but an extra party to trust, an extra API to wait on, an extra point of failure.
On Arc we skipped it. The scheme is called <strong>self-settle</strong> — &quot;settle it yourself&quot;.</p>
<p><img src="https://agentbadge.xyz/images/blog/bstock-arc-x402-payment-hero.png" alt="A USDC coin flies from an agent&#39;s wallet to a treasury vault on Arc, with a trail of USDC coins paying for gas"></p>
<p><img src="https://agentbadge.xyz/images/blog/bstock-arc-x402-payment-d1.png" alt="Diagram: paying on Arc in 6 steps"></p>
<p><em>The agent receives the 402 invoice, signs an EIP-3009 authorization (exactly 5 USDC to the treasury) and broadcasts on Arc itself — gas is paid in USDC. The server reads the receipt from the block: the Transfer event reached the treasury — access opens for 30 days.</em></p>
<h2 id="why-arc-makes-this-possible">Why Arc makes this possible</h2>
<p>Arc is a blockchain built by Circle — the company behind USDC. Its signature feature: <strong>gas is paid in USDC</strong>, not in a separate token. A conventional agent would need to hold two assets: USDC for the payment and ETH for gas. On Arc one balance is enough — USDC covers both the payment and the fee.
For the tokenized-stocks market this closes the loop: bStocks settle in USDC on Binance, the agent&#39;s gas is USDC, and the data subscription is USDC. One asset for trading, for fees, and for information — that is what a market built for machines looks like.</p>
<h2 id="the-flow-in-6-steps">The flow in 6 steps</h2>
<ol>
<li>The agent requests data → gets a 402 with the invoice: scheme, network, amount, recipient.</li>
<li>It signs an <strong>EIP-3009</strong> authorization — the standard for &quot;transfer with authorization&quot;: a signature that permits moving exactly 5 USDC from the agent&#39;s wallet to the recipient. Nothing more, no wallet access.</li>
<li>It broadcasts the transaction itself (hence &quot;client-broadcast&quot;).</li>
<li>It waits for confirmation — seconds.</li>
<li>It retries the request with the transaction hash attached.</li>
<li>The server reads the blockchain: is the tx in a block, did USDC reach the treasury, is the amount right → access for 30 days.</li>
</ol>
<p><img src="https://agentbadge.xyz/images/blog/bstock-arc-x402-payment-2.png" alt="Six-step pipeline: request, 402 invoice, EIP-3009 signature, broadcast, on-chain receipt, access for 30 days"></p>
<h2 id="what-the-server-actually-verifies">What the server actually verifies</h2>
<p>Not a signature — a <strong>receipt</strong>. The server asks the chain for <code>getTransactionReceipt(txHash)</code> and checks: the transaction is really in a block, it contains a <code>Transfer</code> event from the USDC contract to the treasury address, the amount covers the price. This cannot be forged: either the transaction is in a block or it does not exist.</p>
<p><img src="https://agentbadge.xyz/images/blog/bstock-arc-x402-payment-3.png" alt="A block on Arc with a highlighted Transfer log paying 5 USDC to the treasury, inspected by the server"></p>
<h2 id="what-this-gives-the-ecosystem">What this gives the ecosystem</h2>
<p>Removing the facilitator removes a point of failure and a trust assumption. Any wallet holding USDC on Arc becomes a payment client: one asset, one signature, one RPC call. For agents, buying data becomes as routine as calling an API.
This is infrastructure for the tokenized-assets ecosystem, not a demo. Real-time delta data is what keeps bStock prices honest — and the agents that buy it settle on Arc in USDC, the same asset the tokens themselves settle in. Every payment is a public, auditable transaction: the market&#39;s information layer becomes as transparent as its trading layer.
<em>Next: when the delta actually pays — free tier vs real-time.</em></p>
<hr>
<p><strong>Links</strong></p>
<ul>
<li>Agent guide (endpoints, limits, examples): <a href="https://agentbadge.xyz/bstock-guide">agentbadge.xyz/bstock-guide</a></li>
<li>Originally published on the AgentBadge blog: <a href="https://agentbadge.xyz/blog/bstock-arc-x402-payment">agentbadge.xyz/blog/bstock-arc-x402-payment</a></li>
<li>MCP endpoint: <code>https://agentbadge.xyz/mcp/bstock/tools/get_delta</code></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Freemium for AI Agents: Free vs Paid Tiers via HTTP 402 on Arc — HTTP 402로 AI 에이전트에게 유료 API를 판매하는 방법]]></title>
            <link>https://velog.io/@buidl_25/freemium-for-ai-agents-http-402-arc</link>
            <guid>https://velog.io/@buidl_25/freemium-for-ai-agents-http-402-arc</guid>
            <pubDate>Thu, 24 Sep 2026 13:24:29 GMT</pubDate>
            <description><![CDATA[<p>AI 에이전트가 카드 없이, 체크아웃 폼 없이 스스로 결제할 수 있을까요? HTTP 402와 x402를 사용해 실시간 bStock 데이터 API에 프리미엄 게이트를 구축한 사례를 공유합니다.</p>
<hr>
<p>Every SaaS has a free tier and a paid tier. But how do you sell the paid tier when the customer is not a person but a program? An agent has no card, cannot fill a checkout form, cannot type a CVV.</p>
<p>We solved it with <strong>HTTP 402 Payment Required</strong> — a status code that waited three decades for its moment. It is not an error. It is an invoice.</p>
<p>Why does this matter beyond our tracker? Tokenized stocks trade around the clock, and the traders who watch them increasingly delegate monitoring to AI agents. An agent that cannot pay for its own data is a crippled market participant. Machine-payable access — priced in USDC, settled on Arc, proven on-chain — turns every agent into a full customer of the market&#39;s data infrastructure: no cards, no signups, no humans in the loop.</p>
<p><img src="https://agentbadge.xyz/images/blog/bstock-freemium-402-hero.png" alt="A robot inserts a glowing USDC coin into a turnstile marked 402"></p>
<p><img src="https://agentbadge.xyz/images/blog/bstock-freemium-402-d1.png" alt="Diagram: the freemium gate"></p>
<p><em>Every request passes three doors: a live ServicePass means instant real-time; otherwise the free bucket allows one request per minute (a snapshot); otherwise the server answers 402 with an invoice. One USDC transaction (5 USDC on Arc), an on-chain receipt check — and the agent holds a 30-day ServicePass.</em></p>
<h2 id="how-the-gate-works">How the gate works</h2>
<p>Every request to the tracker passes three checks:</p>
<ol>
<li><strong>Already paid?</strong> If the agent holds a live ServicePass (a 30-day access token) — data flows immediately.</li>
<li><strong>Free allowance?</strong> One request per minute is free. A snapshot, not a stream.</li>
<li><strong>Neither?</strong> The server answers 402 and attaches an invoice to the response: what, to whom, how much.</li>
</ol>
<h2 id="inside-the-invoice">Inside the invoice</h2>
<p>The 402 response is not just text. The <code>PAYMENT-REQUIRED</code> header carries a machine-readable payment description:</p>
<pre><code class="language-json">{
  &quot;x402Version&quot;: 2,
  &quot;accepts&quot;: {
    &quot;scheme&quot;: &quot;eip3009-client-broadcast&quot;,
    &quot;network&quot;: &quot;eip155:5042002&quot;,
    &quot;asset&quot;: &quot;USDC&quot;,
    &quot;amount&quot;: &quot;5000000&quot;,
    &quot;payTo&quot;: &quot;0xcdd2...699d&quot;,
    &quot;maxTimeoutSeconds&quot;: 345600
  }
}</code></pre>
<p><img src="https://agentbadge.xyz/images/blog/bstock-freemium-402-3.png" alt="A 402 Payment Required JSON response with the accepts block highlighted"></p>
<p>The agent reads it like a price list: the payment scheme (EIP-3009 — a standardized transfer signature), the network (Arc Testnet), the asset (USDC), the amount (5 USDC — the six zeros are decimals, the amount is in base units), the recipient, and the invoice expiry (4 days).</p>
<h2 id="why-not-api-keys-and-billing-portals">Why not API keys and billing portals</h2>
<p>An API key needs signup, an email, a card, invoices — a human in the loop. 402 + x402 is a <em>programmable</em> paywall: the agent sees the price → signs a transfer → pays → gets access. The whole cycle takes seconds. For a machine, this is the native way to buy things.</p>
<p>And because it runs on <strong>Arc</strong> — Circle&#39;s blockchain where gas itself is paid in USDC — the agent needs exactly one asset in its wallet. One balance covers the payment and the fee. For a market where bStocks themselves settle in USDC, the plumbing finally matches the asset.</p>
<h2 id="one-payment-pays-once">One payment pays once</h2>
<p>After paying, the agent retries the request with the transaction hash attached. The server checks the blockchain — not a claimed signature, but the real receipt from a block — and opens access. The same hash cannot be presented twice: the server atomically claims it, and a second attempt gets <code>tx_replayed</code>. Even ten parallel requests with the same hash — exactly one gets through.</p>
<p>A paywall a program can read and pay turns data into a first-class on-chain service. More agents able to buy real-time data means more eyes on tokenized markets — tighter deltas, faster convergence, healthier price discovery for everyone who trades them.</p>
<p><em>Next: the payment itself on Arc — and why gas there is paid in USDC.</em></p>
<hr>
<p><strong>Links</strong></p>
<ul>
<li>Agent guide (endpoints, limits, examples): <a href="https://agentbadge.xyz/bstock-guide">agentbadge.xyz/bstock-guide</a></li>
<li>Originally published on the AgentBadge blog: <a href="https://agentbadge.xyz/blog/bstock-freemium-402">agentbadge.xyz/blog/bstock-freemium-402</a></li>
<li>MCP endpoint: <code>https://agentbadge.xyz/mcp/bstock/tools/get_delta</code></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Tracking the Delta: How an AI Agent Watches Tokenized Stocks Drift From Their Underlyings]]></title>
            <link>https://velog.io/@buidl_25/Tracking-the-Delta-How-an-AI-Agent-Watches-Tokenized-Stocks-Drift-From-Their-Underlyings</link>
            <guid>https://velog.io/@buidl_25/Tracking-the-Delta-How-an-AI-Agent-Watches-Tokenized-Stocks-Drift-From-Their-Underlyings</guid>
            <pubDate>Thu, 24 Sep 2026 07:57:09 GMT</pubDate>
            <description><![CDATA[<p><img src="https://raw.githubusercontent.com/buidl25/zenn-articles/main/images/bstock-delta-tracker-case-hero.png" alt="cover"></p>
<h2 id="ai-에이전트가-토큰화-주식의-델타를-추적하는-방법">AI 에이전트가 토큰화 주식의 델타를 추적하는 방법</h2>
<blockquote>
<p>토큰화 주식은 24시간 거래되지만, 원주식은 그렇지 않습니다. 토요일 밤, 나스닥이 잠든 사이 토큰화된 애플 주식은 −2%까지 이탈할 수 있습니다. 이 간극이 바로 신호입니다. 우리는 이 델타를 실시간으로 계산하는 트래커를 만들고, MCP를 통해 AI 에이전트에게 넘겼습니다. API 키도, 가입도 없이 — 에이전트가 x402로 5 USDC를 지불하고 30일 접근권을 얻습니다. 기계가 기계에게 지불하는 시대입니다.</p>
</blockquote>
<hr>
<p>Picture this: Apple trades at $336.45 on Nasdaq. Tokenized Apple (AAPLB on Binance) trades at $336.44 at the same moment. A penny apart — noise. But on a Saturday night, with Nasdaq asleep, AAPLB can drift to −2%. That is not noise anymore. That is a signal.</p>
<p><strong>The delta</strong> — the gap between a tokenized stock&#39;s price and its underlying — is where the opportunities live. Humans cannot watch 20+ tokens around the clock. A machine can. So we built a tracker that computes the delta in real time and handed it to AI agents.</p>
<p><img src="https://raw.githubusercontent.com/buidl25/zenn-articles/main/images/bstock-delta-tracker-case-hero.png" alt="Two price lines - AAPLB token vs AAPL underlying - with the -2% delta band highlighted"></p>
<p><img src="https://raw.githubusercontent.com/buidl25/zenn-articles/main/images/bstock-delta-tracker-case-d1.png" alt="Diagram: how the delta tracker works"></p>
<p><em>Binance streams token prices around the clock; Finnhub/Alpaca supply the equity prices. DeltaEngine computes the delta, the market phase (O/C/P) and the stale flag (15s without updates). The MCP server exposes it to the agent through five tools, and Telegram receives an alert the moment a delta crosses the 0.5% threshold.</em></p>
<h2 id="what-the-tracker-computes">What the tracker computes</h2>
<p>For every bStock the tracker keeps two prices:</p>
<ul>
<li><strong>bStockPrice</strong> — the token&#39;s price on Binance, where tokenized stocks trade 24/7;</li>
<li><strong>underlyingPrice</strong> — the real stock&#39;s price from market data providers (Finnhub, with an Alpaca fallback).</li>
</ul>
<p>Delta in percent: <code>(tokenPrice − stockPrice) / stockPrice × 100</code>. Alongside it, three flags a trader actually needs:</p>
<ul>
<li><strong>phase</strong> — is the stock market open (<code>O</code>), closed (<code>C</code>), or in pre-market (<code>P</code>);</li>
<li><strong>stale</strong> — the price feed went quiet for more than 15 seconds, so treat the number with care;</li>
<li><strong>inAlert</strong> — the delta crossed the <strong>0.5% threshold</strong> (configurable).</li>
</ul>
<p>A live response looks like this:</p>
<pre><code class="language-json">{&quot;symbol&quot;:&quot;AAPLB&quot;,&quot;underlying&quot;:&quot;AAPL&quot;,&quot;multiplier&quot;:1.0006,
 &quot;bStockPrice&quot;:336.44,&quot;underlyingPrice&quot;:336.45,
 &quot;deltaPct&quot;:-0.064,&quot;phase&quot;:&quot;O&quot;,&quot;stale&quot;:false,&quot;inAlert&quot;:false}</code></pre>
<p><img src="https://raw.githubusercontent.com/buidl25/zenn-articles/main/images/bstock-delta-tracker-case-2.png" alt="get_delta JSON response with deltaPct and inAlert highlighted"></p>
<h2 id="how-an-agent-uses-it">How an agent uses it</h2>
<p>An AI agent is a program — Claude, a GPT-based bot, your own script — that calls services on its own. Agents talk to services over <strong>MCP</strong>, an open protocol where a service lists its tools and the agent calls them like functions.</p>
<p>The tracker is an MCP server with these tools:</p>
<ul>
<li><code>get_delta</code> — delta for one symbol;</li>
<li><code>list_deltas</code> — all symbols at once;</li>
<li><code>get_quote</code> — current quote;</li>
<li><code>get_events</code> — event history (threshold crossings, stale feeds);</li>
<li><code>get_digest</code> — the day&#39;s summary.</li>
</ul>
<pre><code class="language-bash">curl -X POST https://agentbadge.xyz/mcp/bstock/tools/get_delta \
  -H &quot;Authorization: Bearer $TOKEN&quot; \
  -d &#39;{&quot;symbol&quot;: &quot;AAPLB&quot;}&#39;</code></pre>
<p>There is also Telegram: <code>subscribe_telegram</code> registers the agent&#39;s operator, and the tracker pushes a message whenever a delta crosses 0.5%. No polling needed — the signal finds you.</p>
<p><img src="https://raw.githubusercontent.com/buidl25/zenn-articles/main/images/bstock-delta-tracker-case-3.png" alt="AI agent connected to the MCP tracker (Binance + Finnhub feeds, five tools) with a Telegram alert"></p>
<h2 id="freemium-a-snapshot-for-free-the-stream-for-a-fee">Freemium: a snapshot for free, the stream for a fee</h2>
<p>The first request each minute is free. After that the server answers with <strong>HTTP 402 Payment Required</strong> — not an error, an invoice: &quot;want real-time? pay&quot;. The x402 standard lets the agent pay automatically: 5 USDC on the Arc network buys 30 days of access. No signup, no card, one on-chain transaction — gas paid in USDC too, an Arc specialty. The server verifies the transaction on-chain and opens the door. The same payment cannot be replayed — replay protection is built in.</p>
<p><img src="https://raw.githubusercontent.com/buidl25/zenn-articles/main/images/bstock-delta-tracker-case-4.png" alt="402 paywall flow: request rejected, USDC payment to the Arc vault, 30-day access badge"></p>
<h2 id="why-a-trader-should-care">Why a trader should care</h2>
<p>A −0.06% delta is noise. A −2% delta on a closed exchange means &quot;the token was sold off and the equity has not woken up yet&quot;. Whoever sees it first captures the convergence. A person cannot monitor every token every second — an agent can, and it pays for its own data feed without a human in the loop.</p>
<p><em>Next: inside the 402 paywall — how freemium works when the customer is a machine.</em></p>
<hr>
<p><strong>Links</strong></p>
<ul>
<li>Agent guide (endpoints, limits, examples): <a href="https://agentbadge.xyz/bstock-guide">agentbadge.xyz/bstock-guide</a></li>
<li>Originally published on the AgentBadge blog: <a href="https://agentbadge.xyz/blog/bstock-delta-tracker-case">agentbadge.xyz/blog/bstock-delta-tracker-case</a></li>
<li>MCP endpoint: <code>https://agentbadge.xyz/mcp/bstock/tools/get_delta</code></li>
</ul>
<blockquote>
<p>Originally published at <a href="https://agentbadge.xyz/blog/bstock-delta-tracker-case">AgentBadge</a></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[How Do You Measure Agent Readiness? — 에이전트 준비도를 어떻게 측정할 것인가]]></title>
            <link>https://velog.io/@buidl_25/How-Do-You-Measure-Agent-Readiness</link>
            <guid>https://velog.io/@buidl_25/How-Do-You-Measure-Agent-Readiness</guid>
            <pubDate>Wed, 26 Aug 2026 17:22:41 GMT</pubDate>
            <description><![CDATA[<p><img src="https://agentbadge.xyz/images/blog/how-do-you-measure-agent-readiness/1s.webp" alt="cover"></p>
<h1 id="how-do-you-measure-agent-readiness">How Do You Measure Agent Readiness?</h1>
<h2 id="에이전트-준비도를-어떻게-측정할-것인가">에이전트 준비도를 어떻게 측정할 것인가</h2>
<blockquote>
<p>Agent Readiness가 실제 개념이라면, 측정 가능해야 합니다. 그리고 그 측정은 재현 가능해야 합니다. 이 글에서는 LLM의 의견이 아닌, 결정론적 검사와 증거에 기반한 측정 프레임워크를 소개합니다. URL, 룰셋, 타임스탬프가 같다면 결과도 항상 같습니다. 그것이 &quot;의견&quot;이 아닌 &quot;측정&quot;의 조건입니다. 한국 개발자에게 API의 &quot;AI 대응&quot;을 주관적 라벨이 아닌 객관적 지표로 평가하는 접근 방식을 고민합니다.</p>
</blockquote>
<hr>
<blockquote>
<p>If Agent Readiness is real, it should be measurable. And the measurement should be reproducible.</p>
</blockquote>
<p>You&#39;ve read about <a href="https://agentbadge.xyz/blog/what-is-agent-readiness">what Agent Readiness is</a>. You&#39;ve seen <a href="https://agentbadge.xyz/blog/why-ai-agents-fail-to-use-apis">why AI agents fail to use APIs</a> and <a href="https://agentbadge.xyz/blog/what-ai-agent-needs-to-understand-api">what an agent needs to understand</a>. You know <a href="https://agentbadge.xyz/blog/why-openapi-isnt-enough">why OpenAPI alone isn&#39;t enough</a>.</p>
<p>Now the question shifts from &quot;what&quot; to &quot;how&quot;:</p>
<blockquote>
<p><strong>How do you objectively determine whether an API is ready for AI agents?</strong></p>
</blockquote>
<p>This article introduces a measurement framework for Agent Readiness — one built on deterministic checks, evidence, and reproducibility. Not opinions. Not LLM scores. Measurable properties that any scanner can verify.</p>
<p><img src="https://agentbadge.xyz/images/blog/how-do-you-measure-agent-readiness/1s.webp" alt="Hero — Subjective labels on the left (&quot;AI-friendly&quot;, &quot;Agent-ready&quot;, &quot;Optimized for AI&quot;) with question marks, deterministic formula on the right (same URL + same ruleset + same time = same result) with a green checkmark"></p>
<hr>
<h2 id="the-measurement-problem">The Measurement Problem</h2>
<p>Labels like &quot;AI-friendly API&quot;, &quot;Agent-ready&quot;, and &quot;Optimized for AI&quot; are everywhere. They sound useful. They aren&#39;t.</p>
<p>Two auditors can look at the same API and disagree on whether it&#39;s &quot;agent-friendly.&quot; An LLM can score the same API differently on different runs. A marketing page can claim &quot;AI-optimized&quot; without any way to verify what that means.</p>
<p>The problem isn&#39;t that these labels are wrong. The problem is that they&#39;re <strong>not reproducible</strong>. If two people can look at the same API and reach different conclusions, the measurement isn&#39;t real — it&#39;s an opinion.</p>
<p>If Agent Readiness is a real property of an API, it should be measurable. And the measurement should satisfy a simple requirement:</p>
<pre><code class="language-text">same URL + same ruleset + same point in time = same result</code></pre>
<p>This is the reproducibility requirement. It&#39;s what separates measurement from opinion.</p>
<hr>
<h2 id="what-should-we-measure">What Should We Measure?</h2>
<p>Agent Readiness isn&#39;t a single number. It&#39;s a set of properties across four categories:</p>
<ul>
<li><strong>Discovery</strong> — Can an agent find the API?</li>
<li><strong>Documentation</strong> — Can an agent understand the API?</li>
<li><strong>Authentication</strong> — Can an agent authenticate autonomously?</li>
<li><strong>Machine Readability</strong> — Can an agent interact machine-to-machine?</li>
</ul>
<p>But these aren&#39;t just checkboxes. Each category contains specific, testable assertions — properties that can be verified with HTTP requests:</p>
<pre><code class="language-text">Discovery
  ✓ OpenAPI is discoverable
  ✓ llms.txt exists
  ✓ Documented API entry point exists

Authentication
  ✓ Authentication mechanism is declared
  ✓ Required credentials are documented
  ✓ Protected endpoint behavior is understandable</code></pre>
<p>The question isn&#39;t &quot;does the API have OpenAPI?&quot; The question is &quot;can we verify that OpenAPI is discoverable?&quot; — and that&#39;s a testable property.</p>
<p><img src="https://agentbadge.xyz/images/blog/how-do-you-measure-agent-readiness/2s.webp" alt="Deterministic pipeline: URL → Scanner → Evidence → Rules → Score, with AI copilot as optional dashed step at the end"></p>
<hr>
<h2 id="deterministic-before-intelligent">Deterministic Before Intelligent</h2>
<p>This is the central principle of the measurement framework.</p>
<p>First:</p>
<pre><code class="language-text">HTTP response → Rule → Evidence → Result</code></pre>
<p>Then, AI can help interpret complex cases. But the AI is a copilot, not the primary engine.</p>
<p>The wrong approach:</p>
<pre><code class="language-text">URL → LLM → &quot;Looks agent-ready: 76/100&quot;</code></pre>
<p>The right approach:</p>
<pre><code class="language-text">URL → Deterministic scanner → Evidence → Rules → Score → AI copilot (optional)</code></pre>
<p>This is what distinguishes AgentBadge from an AI auditor. Deterministic checks are reproducible — same input, same output, every time. LLM assessments are not. An LLM might score the same API as 76 today and 82 tomorrow. A deterministic scanner will give you the same result as long as the API hasn&#39;t changed.</p>
<p>This doesn&#39;t mean AI is useless. AI is excellent at interpreting ambiguous evidence, suggesting fixes, and explaining results. But the measurement itself — the check, the evidence, the score — should be deterministic.</p>
<hr>
<h2 id="evidence-not-opinions">Evidence, Not Opinions</h2>
<p>Every assertion in the measurement framework comes with evidence. Not &quot;we think this is true&quot; — but the actual HTTP response that proves it.</p>
<p>Here&#39;s what an evidence card looks like:</p>
<pre><code class="language-text">OPENAPI_DISCOVERABLE
Status: VERIFIED

Evidence:
  GET /openapi.json
  HTTP 200
  Content-Type: application/json
  Valid OpenAPI document</code></pre>
<p><img src="https://agentbadge.xyz/images/blog/how-do-you-measure-agent-readiness/3s.webp" alt="Evidence card: OPENAPI_DISCOVERABLE with Status: VERIFIED in green, evidence block showing GET /openapi.json, HTTP 200, Content-Type: application/json, Valid OpenAPI document"></p>
<p>This is the key difference between measuring and certifying. A certification says &quot;this API is agent-ready.&quot; An evidence card says &quot;here is the HTTP response that proves OpenAPI is discoverable.&quot;</p>
<blockquote>
<p><strong>Don&#39;t tell developers what to believe. Show them what we measured.</strong></p>
</blockquote>
<p>When every assertion includes evidence, the conversation changes. Instead of debating whether an API is &quot;ready,&quot; you can point to specific findings: 72 checks run, 58 passed, 14 failed — here&#39;s the evidence for each.</p>
<hr>
<h2 id="assertions">Assertions</h2>
<p>A scan result is not a magic score. It&#39;s a set of assertions — each one testable, each one with a status and evidence:</p>
<table>
<thead>
<tr>
<th>Assertion</th>
<th>Status</th>
<th>Evidence</th>
</tr>
</thead>
<tbody><tr>
<td>OpenAPI discoverable</td>
<td>VERIFIED</td>
<td><code>/openapi.json → 200</code></td>
</tr>
<tr>
<td>Authentication documented</td>
<td>VERIFIED</td>
<td><code>securitySchemes</code> present in spec</td>
</tr>
<tr>
<td>Machine-readable errors</td>
<td>MISSING</td>
<td>HTML error response, not structured</td>
</tr>
<tr>
<td>Agent guide</td>
<td>MISSING</td>
<td><code>404 /agent-guide.json</code></td>
</tr>
</tbody></table>
<p><img src="https://agentbadge.xyz/images/blog/how-do-you-measure-agent-readiness/4s.webp" alt="Assertions table: four rows showing Assertion, Status, and Evidence columns — two VERIFIED in green, two MISSING in red"></p>
<p>This table is the heart of the measurement. Before you look at the score, you look at the assertions. Each assertion tells you something specific about the API — and each one is independently verifiable.</p>
<hr>
<h2 id="verified--inferred--conflict--missing">VERIFIED / INFERRED / CONFLICT / MISSING</h2>
<p>Every assertion has one of four statuses:</p>
<ul>
<li><strong>VERIFIED</strong> — Direct proof exists. The scanner found the evidence.</li>
<li><strong>MISSING</strong> — Not found. The scanner looked and didn&#39;t find it.</li>
<li><strong>INFERRED</strong> — There are reasonable grounds to believe this is true, but the evidence is insufficient for verification.</li>
<li><strong>CONFLICT</strong> — Two sources contradict each other.</li>
</ul>
<p>Here&#39;s a real example of CONFLICT:</p>
<pre><code class="language-text">OpenAPI spec says:    POST /refund
Agent Guide says:     POST /refund-request</code></pre>
<p>Two sources, same API, different paths. The assertion status is CONFLICT — not VERIFIED, not MISSING. The scanner can&#39;t verify which is correct without making a live request, so it flags the contradiction.</p>
<p><img src="https://agentbadge.xyz/images/blog/how-do-you-measure-agent-readiness/5s.webp" alt="Status model: four cards in a 2x2 grid — VERIFIED (green checkmark), MISSING (red x), INFERRED (yellow question mark), CONFLICT (orange warning) with one-line definitions"></p>
<p>The distinction between INFERRED and VERIFIED matters. INFERRED means &quot;this looks right, but we can&#39;t prove it.&quot; VERIFIED means &quot;here&#39;s the proof.&quot;</p>
<blockquote>
<p><strong>Confidence is not the same thing as verification.</strong></p>
</blockquote>
<hr>
<h2 id="scoring">Scoring</h2>
<p>Only after assertions are established do we compute a score. The score is derived from the assertions — not the other way around.</p>
<pre><code class="language-text">Discovery           18/20
Documentation       19/25
Authentication      17/20
Machine Readability 15/20
Verification        10/15
─────────────────────────
Total               79/100</code></pre>
<p><img src="https://agentbadge.xyz/images/blog/how-do-you-measure-agent-readiness/6s.webp" alt="Scoring breakdown: five category bars in cyan with scores, total 79/100 in green, and a category floor example showing Discovery = 0 blocking a 91/100 total"></p>
<p>There&#39;s a critical rule in the scoring model: <strong>category floor</strong>. A high total score should not hide a critical zero in a fundamental category.</p>
<p>If Discovery = 0, the API is effectively invisible to agents. No amount of excellent documentation or perfect authentication can compensate for the fact that agents can&#39;t find the API. A score of 91/100 with Discovery = 0 is misleading — it suggests the API is nearly ready when it&#39;s actually missing the most fundamental layer.</p>
<p>The category floor prevents this. If any critical category is zero, the total score is capped. A high score should reflect actual readiness, not average out a fatal gap.</p>
<blockquote>
<p><strong>A high score should not hide a critical zero.</strong></p>
</blockquote>
<hr>
<h2 id="score-≠-certification">Score ≠ Certification</h2>
<p>AgentBadge doesn&#39;t say &quot;this API is safe&quot; or &quot;this API is approved for agents.&quot;</p>
<p>It says: <strong>&quot;Here is what we measured, under this ruleset, at this point in time.&quot;</strong></p>
<p>This distinction matters for three reasons:</p>
<ol>
<li><strong>Trust</strong> — Developers can verify the evidence themselves. They don&#39;t need to trust a badge; they can check the proof.</li>
<li><strong>Legal risk</strong> — Certification implies endorsement. Measurement implies observation. AgentBadge observes and reports; it doesn&#39;t endorse.</li>
<li><strong>Reproducibility</strong> — Anyone can run the same checks and get the same results. The measurement is transparent, not opaque.</li>
</ol>
<blockquote>
<p><strong>Don&#39;t certify. Measure.</strong></p>
</blockquote>
<hr>
<h2 id="reproducibility">Reproducibility</h2>
<p>A measurement is only useful if it can be independently verified. The reproducibility formula is:</p>
<pre><code class="language-text">URL + timestamp + ruleset version + scan artifact + report hash</code></pre>
<p>Example:</p>
<pre><code class="language-text">Agent Readiness v1.0
Scan: 2026-08-26T14:03:22Z
Ruleset: agentbadge-ruleset@1.0.0
Report hash: a3f7b2c1...
Score: 79/100</code></pre>
<p>Every scan records the URL, the timestamp, the ruleset version, and produces a report hash. The scan artifact is preserved. Another scanner — or another developer — can run the same checks against the same URL with the same ruleset and verify the results.</p>
<p>This is what makes the measurement real. It&#39;s not a subjective assessment that changes with the auditor. It&#39;s a deterministic process that produces the same output for the same input.</p>
<hr>
<h2 id="static-measurement-vs-real-agent-behavior">Static Measurement vs Real Agent Behavior</h2>
<p>An honest caveat: <strong>static readiness does not prove that every AI agent will successfully use an API.</strong></p>
<p>AgentBadge measures whether an API <em>can be</em> discovered, understood, and potentially used by an agent — based on observable evidence. It doesn&#39;t measure whether every agent <em>will</em> successfully complete every task.</p>
<p>These are different questions:</p>
<ul>
<li><strong>Static measurement</strong>: &quot;Does the API expose the properties that an agent needs?&quot; (Phase 1)</li>
<li><strong>Active verification</strong>: &quot;Can an agent actually perform specific operations?&quot; (Phase 2)</li>
<li><strong>Behavioral verification</strong>: &quot;What does the agent do when it encounters this API in production?&quot; (Future)</li>
</ul>
<p>The measurement framework starts with Phase 1 — static measurement. It&#39;s the foundation. But it&#39;s not the end of the road.</p>
<pre><code class="language-text">Phase 1: Static measurement (current)
    ↓
Phase 2: Active verification (next)
    ↓
Future: Behavioral / runtime verification</code></pre>
<p>Runtime telemetry, agent behavior logging, and real-world performance metrics are future work. They belong in later articles, not this one. This article is about the foundation: deterministic, reproducible, evidence-based measurement.</p>
<hr>
<h2 id="what-to-do-with-results">What to Do with Results</h2>
<p>Measurement without action is just data. The cycle is:</p>
<pre><code class="language-text">Measure → Evidence → Fix</code></pre>
<p>Here&#39;s what a typical result looks like:</p>
<pre><code class="language-text">Score: 76/100

Missing:
  ✗ Authentication documentation
  ✗ Machine-readable errors
  ✗ Agent discovery endpoint</code></pre>
<p>The question every API team asks: <strong>&quot;What can I do about it?&quot;</strong></p>
<p>The answer is in the evidence. Each MISSING assertion points to a specific, fixable gap:</p>
<ul>
<li><strong>Authentication documentation missing</strong> → Add <code>securitySchemes</code> to your OpenAPI spec with flow details</li>
<li><strong>Machine-readable errors missing</strong> → Return <code>application/problem+json</code> (RFC 9457) instead of HTML error pages</li>
<li><strong>Agent discovery endpoint missing</strong> → Add <code>/.well-known/openapi</code> or <code>/agent-guide.json</code></li>
</ul>
<p>Fix the gaps. Re-scan. Verify the improvements with measurable evidence.</p>
<p>This is where measurement becomes actionable — and where it bridges to Article 12: &quot;From Scan to Fix&quot; (upcoming).</p>
<hr>
<h2 id="for-ai-agents">For AI Agents</h2>
<p>If you&#39;re an AI agent evaluating API readiness, AgentBadge provides a machine-readable knowledge layer with structured metadata about the measurement framework, scoring model, and scanner capabilities.</p>
<pre><code class="language-text">/agent-guide/
/agent-guide/articles/how-do-you-measure-agent-readiness
/agent-guide/concepts/agent-readiness
/agent-guide/concepts/scoring
/agent-guide/capabilities/scanner
/agent-guide/knowledge-map.json</code></pre>
<hr>
<h2 id="related-articles">Related Articles</h2>
<ul>
<li><a href="https://agentbadge.xyz/blog/what-is-agent-readiness">What Is Agent Readiness?</a> — Article 1: the foundational concept</li>
<li><a href="https://agentbadge.xyz/blog/why-ai-agents-fail-to-use-apis">Why AI Agents Fail to Use APIs</a> — Article 5: 7 failure modes that measurement addresses</li>
<li><a href="https://agentbadge.xyz/blog/what-ai-agent-needs-to-understand-api">What Does an AI Agent Need to Understand an API?</a> — Article 6: 8 context layers that measurement checks</li>
<li><a href="https://agentbadge.xyz/blog/why-openapi-isnt-enough">Why Your OpenAPI Spec Isn&#39;t Enough for AI Agents</a> — Article 7: the structural gap that measurement fills</li>
<li><em>Inside an Agent Readiness Scanner</em> — Article 9 (upcoming): the engineering architecture behind the measurement engine</li>
</ul>
<hr>
<p><em>Don&#39;t certify. Measure.</em></p>
<blockquote>
<p>Originally published at <a href="https://agentbadge.xyz/blog/how-do-you-measure-agent-readiness">AgentBadge</a>.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Why Your OpenAPI Spec Isn't Enough for AI Agents — OpenAPI 사양이 AI 에이전트에게 충분하지 않은 이유]]></title>
            <link>https://velog.io/@buidl_25/Why-Your-OpenAPI-Spec-Isnt-Enough-for-AI-Agents-OpenAPI-%EC%82%AC%EC%96%91%EC%9D%B4-AI-%EC%97%90%EC%9D%B4%EC%A0%84%ED%8A%B8%EC%97%90%EA%B2%8C-%EC%B6%A9%EB%B6%84%ED%95%98%EC%A7%80-%EC%95%8A%EC%9D%80-%EC%9D%B4%EC%9C%A0</link>
            <guid>https://velog.io/@buidl_25/Why-Your-OpenAPI-Spec-Isnt-Enough-for-AI-Agents-OpenAPI-%EC%82%AC%EC%96%91%EC%9D%B4-AI-%EC%97%90%EC%9D%B4%EC%A0%84%ED%8A%B8%EC%97%90%EA%B2%8C-%EC%B6%A9%EB%B6%84%ED%95%98%EC%A7%80-%EC%95%8A%EC%9D%80-%EC%9D%B4%EC%9C%A0</guid>
            <pubDate>Tue, 25 Aug 2026 19:42:08 GMT</pubDate>
            <description><![CDATA[<p> <img src="https://agentbadge.xyz/images/blog/why-openapi-isnt-enough/1s.webp" alt="cover"></p>
<h1 id="why-your-openapi-spec-isnt-enough-for-ai-agents">Why Your OpenAPI Spec Isn&#39;t Enough for AI Agents</h1>
<h2 id="openapi-사양이-ai-에이전트에게-충분하지-않은-이유">OpenAPI 사양이 AI 에이전트에게 충분하지 않은 이유</h2>
<blockquote>
<p>OpenAPI는 API를 기술합니다. Agent Readiness는 에이전트가 실제로 그 API를 사용할 수 있는지를 기술합니다. 완벽한 OpenAPI 사양이 있어도 AI 에이전트는 실패할 수 있습니다. 사양이 틀려서가 아니라, 사양이 인터페이스를 기술할 뿐 에이전트의 경험을 기술하지 않기 때문입니다. 이 글에서는 결제 API의 실례를 통해 API 기술과 에이전트 이해 사이의 구조적 간극을 탐구합니다. 한국 개발자에게 OpenAPI 너머의 &quot;에이전트 가독성&quot;이란 무엇인지 고민합니다.</p>
</blockquote>
<hr>
<blockquote>
<p>OpenAPI describes an API. Agent Readiness describes whether an agent can actually use it.</p>
</blockquote>
<p>Your API has a complete OpenAPI spec. Every endpoint, schema, and response code is documented. Yet when an AI agent tries to use it, the agent fails — not because the spec is wrong, but because the spec describes an interface, not an agent&#39;s experience.</p>
<p>This isn&#39;t about OpenAPI being bad. OpenAPI is a necessary foundation. But it&#39;s not a complete Agent Readiness layer.</p>
<hr>
<h2 id="the-provocation">The Provocation</h2>
<blockquote>
<p>&quot;Our API has OpenAPI. Why does an AI agent still fail to use it?&quot;</p>
</blockquote>
<p>This is the question API teams ask after adding AI agent support. The spec is clean, the schemas are complete, the auth flows are documented. And yet — agents struggle.</p>
<p>The answer isn&#39;t that OpenAPI is insufficient as a specification. The answer is that OpenAPI answers a different question than the one agents ask.</p>
<p>OpenAPI answers: <strong>&quot;What endpoints exist?&quot;</strong></p>
<p>Agents ask: <strong>&quot;Can I discover this API? Can I authenticate autonomously? Can I understand what an operation means? Can I recover from errors? Can I trust that a claim about this API is true?&quot;</strong></p>
<p>These are different questions. And the gap between them is structural.</p>
<hr>
<h2 id="one-real-example-a-payments-api">One Real Example: A Payments API</h2>
<p>Consider a payments API with three endpoints:</p>
<pre><code class="language-text">POST /payments              — create a payment
GET  /payments/{id}         — retrieve payment status
POST /payments/{id}/refund  — refund a payment</code></pre>
<p>OpenAPI describes all three perfectly: paths, methods, request schemas, response schemas, authentication schemes. A human developer reading this spec would understand how to use the API.</p>
<p>But an AI agent needs to answer questions that the spec doesn&#39;t address:</p>
<pre><code class="language-text">Can I create a payment?
When should I call it?
What must happen first?
What does &quot;pending&quot; mean?
When can I refund?
What happens if payment fails?
Should I retry?</code></pre>
<p><img src="https://agentbadge.xyz/images/blog/why-openapi-isnt-enough/2s.webp" alt="Payments API example: three endpoint boxes with agent questions radiating outward as dashed lines"></p>
<p>Each of these questions maps to a layer beyond OpenAPI:</p>
<ul>
<li><strong>&quot;Can I create a payment?&quot;</strong> — Discovery: Is there a <code>llms.txt</code> or <code>.well-known/openapi</code> so the agent can find the API?</li>
<li><strong>&quot;When should I call it?&quot;</strong> — Semantics: Is <code>POST /payments</code> idempotent? Does it charge money? Is it safe to retry?</li>
<li><strong>&quot;What must happen first?&quot;</strong> — Capabilities: What prerequisites exist? Does the agent need a customer ID first?</li>
<li><strong>&quot;What does &#39;pending&#39; mean?&quot;</strong> — Semantics: What are the possible states and transitions?</li>
<li><strong>&quot;When can I refund?&quot;</strong> — Semantics + Safety: Is refund conditional on payment state? Is it reversible?</li>
<li><strong>&quot;What happens if payment fails?&quot;</strong> — Errors: Does the API return structured errors with recovery hints?</li>
<li><strong>&quot;Should I retry?&quot;</strong> — Safety: Is retry safe, or will it create duplicate payments?</li>
</ul>
<p>OpenAPI describes the interface. These questions require context that goes beyond the interface.</p>
<p>Consider what happens when an agent actually tries to use this payments API. The agent reads the OpenAPI spec, identifies <code>POST /payments</code>, constructs a request, and sends it. So far, so good. But then:</p>
<ul>
<li>The response says <code>&quot;status&quot;: &quot;pending&quot;</code>. The agent doesn&#39;t know if &quot;pending&quot; means &quot;wait 2 seconds&quot; or &quot;wait 2 days&quot; or &quot;something went wrong.&quot;</li>
<li>The agent tries to refund a payment. The API returns <code>400 Bad Request</code> with <code>{&quot;error&quot;: &quot;invalid_state&quot;}</code>. The agent doesn&#39;t know what &quot;invalid_state&quot; means or what valid states would look like.</li>
<li>The agent retries <code>POST /payments</code> after a timeout. A second payment is created. The agent didn&#39;t know the operation wasn&#39;t idempotent.</li>
</ul>
<p>None of these failures are caused by a wrong OpenAPI spec. They&#39;re caused by missing context that the spec was never designed to carry.</p>
<hr>
<h2 id="the-structural-gap">The Structural Gap</h2>
<p>The gap is not about model intelligence. A more capable model still can&#39;t answer &quot;Is this operation idempotent?&quot; if the information isn&#39;t in the spec. The gap is structural: <strong>API description ≠ agent understanding.</strong></p>
<p>This is not a call for a new magic file. Agent Readiness isn&#39;t about adding one more JSON file alongside OpenAPI.</p>
<p>It&#39;s about cumulative layers:</p>
<pre><code class="language-text">OpenAPI
  + Discovery
  + Authentication
  + Semantics
  + Errors
  + Examples
  + Evidence</code></pre>
<p><img src="https://agentbadge.xyz/images/blog/why-openapi-isnt-enough/3s.webp" alt="Readiness stack: vertical building blocks from OpenAPI (base) to Evidence (top)"></p>
<p>Each layer builds on the previous. Missing any one creates a failure point — not in the spec, but in the agent&#39;s experience.</p>
<ul>
<li><strong>OpenAPI</strong> provides endpoint definitions, schema types, auth schemes, response codes. Necessary. But not sufficient.</li>
<li><strong>Discovery</strong> makes the API findable by autonomous agents (<code>llms.txt</code>, <code>.well-known</code>, <code>ai-sitemap.xml</code>). Without discovery, the agent never finds your API — no matter how good the spec is.</li>
<li><strong>Authentication</strong> provides machine-readable auth metadata (RFC 8414, <code>securitySchemes</code> with flow details). Without it, the agent can&#39;t obtain credentials autonomously.</li>
<li><strong>Semantics</strong> tells the agent what an operation means (side-effects, idempotency, safety classification). Without semantics, the agent doesn&#39;t know if <code>POST /payments</code> charges money or just creates a record.</li>
<li><strong>Errors</strong> provides structured error responses with recovery hints (RFC 9457 Problem Details). Without structured errors, the agent can&#39;t recover — it just fails.</li>
<li><strong>Examples</strong> gives concrete request/response pairs for every operation. Without examples, the agent guesses at request shapes and gets 400s.</li>
<li><strong>Evidence</strong> provides machine-readable proof that claims about the API are verifiable. Without evidence, every claim is just marketing.</li>
</ul>
<p>AgentBadge measures this cumulative readiness — not as another standard, but as a way to verify that the layers exist and work.</p>
<hr>
<h2 id="evidence-dont-declare-show">Evidence: Don&#39;t Declare, Show</h2>
<p>A claim without evidence is a marketing statement. An agent cannot act on &quot;our API is agent-ready&quot; any more than it can act on &quot;our API is fast.&quot;</p>
<p>The Claim + Evidence pattern transforms assertions into verifiable facts:</p>
<table>
<thead>
<tr>
<th>Claim</th>
<th>Evidence</th>
</tr>
</thead>
<tbody><tr>
<td>&quot;API is discoverable&quot;</td>
<td><code>GET /llms.txt</code> returns 200 with valid content</td>
</tr>
<tr>
<td>&quot;Auth is machine-readable&quot;</td>
<td><code>GET /.well-known/oauth-authorization-server</code> returns RFC 8414 metadata</td>
</tr>
<tr>
<td>&quot;Errors follow RFC 9457&quot;</td>
<td><code>GET /payments/invalid</code> returns <code>application/problem+json</code></td>
</tr>
<tr>
<td>&quot;Refunds are idempotent&quot;</td>
<td><code>x-agent-semantics: idempotent: true</code> in OpenAPI + test endpoint verifies</td>
</tr>
</tbody></table>
<p><img src="https://agentbadge.xyz/images/blog/why-openapi-isnt-enough/4s.webp" alt="Claim vs Evidence: two-panel comparison showing text claim on left, code evidence on right"></p>
<p>This is the key concept that bridges to the measurement framework. Evidence is not a document — it&#39;s a verifiable response from your API that proves a property holds.</p>
<p>When AgentBadge scans your API, every finding includes evidence: the actual HTTP response, header, or body that produced the check result. Not &quot;we think your API supports discovery&quot; — but <code>GET /llms.txt → 200, content-type: text/plain, 847 bytes, valid format</code>.</p>
<p>This changes the conversation. Instead of debating whether an API is &quot;agent-ready&quot; in the abstract, you can point to specific, verifiable responses. Instead of a badge that says &quot;ready,&quot; you get a report that says &quot;72 checks run, 58 passed, 14 failed — here&#39;s the evidence for each.&quot;</p>
<p>Evidence also means reproducibility. Another agent, another scanner, another developer can run the same checks and get the same results. The claim isn&#39;t &quot;trust us&quot; — it&#39;s &quot;verify yourself.&quot;</p>
<hr>
<h2 id="the-measurement-problem">The Measurement Problem</h2>
<p>If OpenAPI is necessary but not sufficient, and if Agent Readiness is cumulative layers with evidence — then the next question is:</p>
<blockquote>
<p><strong>How do we objectively determine what an agent can actually discover, understand, and use?</strong></p>
</blockquote>
<p>That&#39;s the measurement problem. And it&#39;s what <a href="https://agentbadge.xyz/blog/measure-dont-certify">Article 8 — &quot;Measuring Agent Readiness: A Practical Framework for AI-Ready APIs&quot;</a> addresses.</p>
<p>The measurement framework turns the 7 layers into 72 deterministic checks across 15 categories. Each check produces evidence. Each evidence item is scored. Each score is verifiable.</p>
<p><img src="https://agentbadge.xyz/images/blog/why-openapi-isnt-enough/5s.webp" alt="Article 7 to Article 8 bridge: flow from structural gap through measurement problem to framework"></p>
<hr>
<h2 id="what-you-can-do-now">What You Can Do Now</h2>
<ol>
<li><strong>Check your discovery layer</strong> — Does <code>GET /llms.txt</code> return 200? Does <code>/.well-known/openapi</code> exist?</li>
<li><strong>Audit your semantics</strong> — Do your OpenAPI operations have <code>summary</code> and <code>description</code> fields that explain intent, not just method?</li>
<li><strong>Review your error responses</strong> — Are errors structured (RFC 9457) with recovery hints, or just <code>{&quot;error&quot;: &quot;something&quot;}</code>?</li>
<li><strong>Add examples</strong> — Does every operation have at least one concrete request/response example?</li>
<li><strong>Run a scan</strong> — <code>npx @agentbadge/cli scan https://your-api.com</code> — 72 checks in seconds, free, no signup.</li>
</ol>
<pre><code class="language-bash">npx @agentbadge/cli scan https://api.example.com

# JSON report with evidence
npx @agentbadge/cli scan https://api.example.com --format json &gt; report.json</code></pre>
<p>Every finding links to the HTTP response that produced it. Evidence, not assertions.</p>
<hr>
<h2 id="related-articles">Related Articles</h2>
<ul>
<li><a href="https://agentbadge.xyz/blog/what-is-agent-readiness">What Is Agent Readiness?</a> — Article 1: the foundational concept</li>
<li><a href="https://agentbadge.xyz/blog/why-ai-agents-fail-to-use-apis">Why AI Agents Fail to Use APIs</a> — Article 5: 7 failure modes</li>
<li><a href="https://agentbadge.xyz/blog/what-ai-agent-needs-to-understand-api">What Does an AI Agent Need to Understand an API?</a> — Article 6: 8 context layers</li>
</ul>
<hr>
<p><em>OpenAPI describes an API. Agent Readiness describes whether an agent can actually use it.</em></p>
<blockquote>
<p>Originally published at <a href="https://agentbadge.xyz/blog/why-openapi-isnt-enough">AgentBadge</a></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[What Does an AI Agent Actually Need to Understand an API? — AI 에이전트가 API를 이해하기 위해 실제로 필요한 것]]></title>
            <link>https://velog.io/@buidl_25/What-Does-an-AI-Agent-Actually-Need-to-Understand-an-API-AI-%EC%97%90%EC%9D%B4%EC%A0%84%ED%8A%B8%EA%B0%80-API%EB%A5%BC-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%B4-%EC%8B%A4%EC%A0%9C%EB%A1%9C-%ED%95%84%EC%9A%94%ED%95%9C-%EA%B2%83</link>
            <guid>https://velog.io/@buidl_25/What-Does-an-AI-Agent-Actually-Need-to-Understand-an-API-AI-%EC%97%90%EC%9D%B4%EC%A0%84%ED%8A%B8%EA%B0%80-API%EB%A5%BC-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%B4-%EC%8B%A4%EC%A0%9C%EB%A1%9C-%ED%95%84%EC%9A%94%ED%95%9C-%EA%B2%83</guid>
            <pubDate>Fri, 21 Aug 2026 08:25:36 GMT</pubDate>
            <description><![CDATA[<p><img src="https://agentbadge.xyz/images/blog/what-ai-agent-needs-understand-api/1s.webp" alt="cover"></p>
<h1 id="what-does-an-ai-agent-actually-need-to-understand-an-api">What Does an AI Agent Actually Need to Understand an API?</h1>
<h2 id="ai-에이전트가-api를-이해하기-위해-실제로-필요한-것">AI 에이전트가 API를 이해하기 위해 실제로 필요한 것</h2>
<blockquote>
<p>인간을 위해 완벽하게 문서화된 API도 AI 에이전트에게는 거의 사용할 수 없는 경우가 있습니다. OpenAPI는 인터페이스를 기술하지만, 에이전트에는 &quot;의도 수준의 설명&quot;, &quot;기계 판독 가능한 인증&quot;, &quot;오류 복구 힌트&quot;, &quot;안전성 분류&quot; 등 더 많은 컨텍스트가 필요합니다. 이 글에서는 자율 에이전트가 API를 발견하고, 이해하고, 성공적으로 사용할 수 있는지를 결정하는 8개의 컨텍스트 계층을 식별합니다. 한국 개발자에게 OpenAPI 너머의 &quot;에이전트 가독성&quot;이란 무엇인지 고민합니다.</p>
</blockquote>
<hr>
<p>An API can be perfectly documented for humans and still be nearly impossible for an AI agent to use.</p>
<p>OpenAPI describes the interface — paths, methods, schemas. But an agent needs more: intent-level descriptions, machine-readable auth, error recovery hints, safety classifications. The gap between &quot;documented for humans&quot; and &quot;understandable by agents&quot; is not about model intelligence. It&#39;s about missing context layers.</p>
<p>This article identifies the 8 context layers that determine whether an autonomous agent can discover, understand, and successfully use your API.</p>
<hr>
<h2 id="the-agent-context-flow">The Agent Context Flow</h2>
<p>When an agent receives a task — &quot;find a payment API and process a refund&quot; — it runs through a decision chain:</p>
<pre><code class="language-text">Agent
  ↓
&quot;Where is the API?&quot;          → Discovery
  ↓
&quot;What can I do here?&quot;        → Capabilities
  ↓
&quot;What do I need to provide?&quot; → Inputs
  ↓
&quot;Do I have permission?&quot;      → Authentication
  ↓
&quot;What does this mean?&quot;       → Semantics
  ↓
&quot;What will I get back?&quot;      → Output
  ↓
&quot;What if something breaks?&quot;  → Errors
  ↓
&quot;Is it safe to do this?&quot;     → Safety
  ↓
SUCCESS / FAILURE</code></pre>
<p>Each layer is a potential failure point. A human developer compensates with experience and intuition. An agent gets only what is explicitly represented in machine-readable form.</p>
<p><img src="https://agentbadge.xyz/images/blog/what-ai-agent-needs-understand-api/1s.webp" alt="Hero — Agent context flow: 8 layers from Discovery to Safety"></p>
<hr>
<h2 id="1-discovery--what-is-this-api">1. Discovery — &quot;What is this API?&quot;</h2>
<p>An agent cannot use an API it cannot find. Machine-readable discovery is the first layer.</p>
<p><strong>Bad:</strong> No <code>llms.txt</code>, no <code>.well-known</code> endpoints, no <code>ai-sitemap.xml</code>. The API is invisible to autonomous discovery. A human might Google it. An agent operating in a pipeline cannot.</p>
<p><strong>Better:</strong> <code>llms.txt</code> at root with API summary. <code>/.well-known/openapi</code> or <code>/.well-known/service-desc</code> for spec discovery. <code>ai-sitemap.xml</code> listing API endpoints. <code>link rel=&quot;service&quot;</code> from the homepage.</p>
<p><strong>Why agents care:</strong> Without discovery, the agent stops at step one. It doesn&#39;t matter how good your OpenAPI is if the agent can&#39;t find it. Discovery is the prerequisite for all subsequent layers.</p>
<hr>
<h2 id="2-capabilities--what-can-i-do-here">2. Capabilities — &quot;What can I do here?&quot;</h2>
<p>Agents plan actions at the intent level, not the HTTP method level. <code>POST /orders</code> — is that creating, updating, or processing?</p>
<p><strong>Bad:</strong> Bare endpoint listing. Agent sees HTTP methods but doesn&#39;t understand intent. It can call the endpoint but doesn&#39;t know what it accomplishes.</p>
<p><strong>Better:</strong> Capability descriptions mapped to endpoints: &quot;search products&quot;, &quot;create orders&quot;, &quot;check order status&quot;, &quot;cancel an order&quot;. Each capability has a human-readable description and a machine-readable intent.</p>
<p><strong>Why agents care:</strong> Agents decompose tasks into sub-goals. &quot;Process a refund&quot; becomes: find order → check status → issue refund. Without capability-level descriptions, the agent can&#39;t map its sub-goals to your endpoints.</p>
<hr>
<h2 id="3-inputs--what-do-i-need-to-provide">3. Inputs — &quot;What do I need to provide?&quot;</h2>
<p>Agents cannot read between the lines. Empty <code>description: &quot;&quot;</code> means the agent doesn&#39;t know what to send.</p>
<p><strong>Bad:</strong></p>
<pre><code class="language-yaml">customer_id:
  type: string
  description: &quot;&quot;</code></pre>
<p><strong>Better:</strong></p>
<pre><code class="language-yaml">customer_id:
  type: string
  format: uuid
  description: &quot;UUID of an existing customer, obtained from GET /customers&quot;
  example: &quot;550e8400-e29b-41d4-a716-446655440000&quot;</code></pre>
<p><strong>Why agents care:</strong> Without descriptions, the agent guesses. It might send a customer email instead of a UUID. It might omit required fields. Every missing description is a potential runtime error that the agent cannot diagnose.</p>
<hr>
<h2 id="4-authentication--do-i-have-permission">4. Authentication — &quot;Do I have permission?&quot;</h2>
<p>Authentication is one of the top failure causes for agents. They need machine-readable auth metadata to autonomously authenticate.</p>
<p><strong>Bad:</strong> Human OAuth docs with browser redirect flows. The agent cannot execute browser steps. It gets a 401 and stops.</p>
<p><strong>Better:</strong> <code>securitySchemes</code> in OpenAPI with full flow descriptions. <code>/.well-known/oauth-authorization-server</code> (RFC 8414) for machine-readable discovery of token endpoints, scopes, and grant types.</p>
<p><strong>Why agents care:</strong> If the agent can&#39;t authenticate autonomously, it can&#39;t use the API at all. Browser-based OAuth flows are designed for humans clicking &quot;Authorize&quot;. Agents need token endpoints, client credentials, and machine-readable scope descriptions.</p>
<hr>
<h2 id="5-semantics--what-does-this-operation-actually-mean">5. Semantics — &quot;What does this operation actually mean?&quot;</h2>
<p>This is critical for autonomous agents: is the operation safe? Can it be retried? Are there side effects? Does it charge money?</p>
<p><strong>Bad:</strong></p>
<pre><code class="language-yaml">POST /api/v2/process:
  summary: &quot;Process&quot;
  description: &quot;&quot;</code></pre>
<p><strong>Better:</strong></p>
<pre><code class="language-yaml">POST /api/v2/process:
  x-agent-semantics:
    operation: create
    side-effects: true
    idempotent: false
    charges-money: true
    safe-to-retry: false</code></pre>
<p><strong>Why agents care:</strong> Without semantic metadata, <code>DELETE /account</code> and <code>GET /account</code> are both just HTTP requests to an agent. But the risk is entirely different. Agents need to know: can I retry this? Will retrying double-charge the customer? Is this destructive?</p>
<p><img src="https://agentbadge.xyz/images/blog/what-ai-agent-needs-understand-api/3s.webp" alt="Evolution: Human-readable → Machine-readable → Agent-readable"></p>
<hr>
<h2 id="6-output--what-will-i-get">6. Output — &quot;What will I get?&quot;</h2>
<p>Agents need action chains. Not just &quot;what came back&quot; but &quot;what to do next.&quot;</p>
<p><strong>Bad:</strong></p>
<pre><code class="language-yaml">responses:
  &#39;200&#39;:
    description: &quot;OK&quot;
    schema:
      type: object</code></pre>
<p><strong>Better:</strong></p>
<pre><code class="language-yaml">responses:
  &#39;200&#39;:
    description: &quot;Order created successfully&quot;
    schema:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: &quot;Order ID for tracking&quot;
        status:
          type: string
          enum: [pending, confirmed, shipped]
        next_actions:
          type: array
          items:
            type: object
            properties:
              action:
                type: string
                enum: [confirm, cancel, track]
              endpoint:
                type: string</code></pre>
<p><strong>Why agents care:</strong> Without structured output, the agent receives a blob of JSON and doesn&#39;t know which fields to use for the next step. <code>next_actions</code> tells the agent what it can do after this response — enabling autonomous multi-step workflows.</p>
<hr>
<h2 id="7-errors--what-if-something-goes-wrong">7. Errors — &quot;What if something goes wrong?&quot;</h2>
<p>Good agent APIs describe not only how to succeed but how to recover. Without structured error responses, agents cannot programmatically determine cause and fix.</p>
<p><strong>Bad:</strong></p>
<pre><code class="language-json">400 Bad Request
{&quot;error&quot;: &quot;invalid_request&quot;}</code></pre>
<p><strong>Better:</strong></p>
<pre><code class="language-json">{
  &quot;type&quot;: &quot;https://agentbadge.xyz/errors/invalid-format&quot;,
  &quot;title&quot;: &quot;Invalid customer_id format&quot;,
  &quot;status&quot;: 400,
  &quot;errors&quot;: [
    {
      &quot;field&quot;: &quot;customer_id&quot;,
      &quot;code&quot;: &quot;invalid_format&quot;,
      &quot;message&quot;: &quot;Expected UUID format&quot;
    }
  ],
  &quot;recovery_hint&quot;: &quot;Obtain a valid customer_id from GET /customers&quot;
}</code></pre>
<p><strong>Why agents care:</strong> Without structured errors, the agent sees &quot;400 Bad Request&quot; and stops. It doesn&#39;t know which field was wrong or how to fix it. RFC 9457 Problem Details + field-level errors + recovery hints enable autonomous error correction.</p>
<p><img src="https://agentbadge.xyz/images/blog/what-ai-agent-needs-understand-api/5s.webp" alt="Error recovery flow: 401 → refresh, 403 → request permission, 404 → missing, 429 → retry, 500 → backoff"></p>
<hr>
<h2 id="8-safety--is-it-safe-to-do-this">8. Safety — &quot;Is it safe to do this?&quot;</h2>
<p><code>DELETE /account</code> and <code>GET /account</code> are both HTTP requests to an agent without safety classification. But the risk is entirely different.</p>
<p><strong>Bad:</strong> No safety classification. Agent treats all operations the same. It might retry a destructive operation because it got a timeout.</p>
<p><strong>Better:</strong></p>
<pre><code class="language-yaml">x-agent-safety:
  risk-level: financial
  reversible: false
  requires-confirmation: true
  warning: &quot;This action permanently deletes the account&quot;</code></pre>
<p>Safety levels: <code>read-only</code> → <code>write</code> → <code>destructive</code> → <code>financial</code> → <code>irreversible</code>.</p>
<p><strong>Why agents care:</strong> Agents retry on timeouts. If a <code>DELETE</code> operation is retried, data is lost. Safety classification tells the agent: &quot;don&#39;t retry this&quot;, &quot;ask for confirmation&quot;, or &quot;this is safe to repeat&quot;.</p>
<p><img src="https://agentbadge.xyz/images/blog/what-ai-agent-needs-understand-api/4s.webp" alt="Safety classification: 5 risk levels from read-only to irreversible"></p>
<hr>
<h2 id="version-a-vs-version-b">Version A vs Version B</h2>
<p>Consider two APIs with identical OpenAPI structure:</p>
<p><strong>Version A — OpenAPI only:</strong></p>
<ul>
<li>Paths and methods: ✅</li>
<li>Schemas: ✅ (but empty descriptions)</li>
<li>Security schemes: ✅ (but no .well-known)</li>
<li>No semantic metadata</li>
<li>No error recovery hints</li>
<li>No safety classification</li>
</ul>
<p><strong>Version B — OpenAPI + Agent Context:</strong></p>
<ul>
<li>Paths and methods: ✅</li>
<li>Schemas with full descriptions, examples, constraints: ✅</li>
<li><code>/.well-known/oauth-authorization-server</code>: ✅</li>
<li><code>x-agent-semantics</code> on every operation: ✅</li>
<li>RFC 9457 Problem Details with recovery hints: ✅</li>
<li><code>x-agent-safety</code> classification: ✅</li>
<li><code>llms.txt</code> with API summary: ✅</li>
</ul>
<p>An agent given Version A will fail at step 3 (Inputs) — it doesn&#39;t know what to send. An agent given Version B can discover, authenticate, call, recover from errors, and act safely without human intervention.</p>
<p><img src="https://agentbadge.xyz/images/blog/what-ai-agent-needs-understand-api/2s.webp" alt="Version A vs Version B: sparse spec vs rich agent context"></p>
<p>The difference is not the model. The difference is the context.</p>
<hr>
<h2 id="this-is-agent-readiness">This Is Agent Readiness</h2>
<p>These 8 context layers are not a wish list. They are measurable properties. <a href="https://agentbadge.xyz/blog/what-is-agent-readiness">Agent Readiness</a> is the framework that measures whether an API provides sufficient context for autonomous use.</p>
<p>Agent Readiness checks each layer with deterministic, evidence-based rules:</p>
<ul>
<li><strong>Discovery:</strong> Does <code>llms.txt</code> exist? Does <code>/.well-known/openapi</code> resolve?</li>
<li><strong>Capabilities:</strong> Are operation descriptions non-empty and intent-level?</li>
<li><strong>Inputs:</strong> Do schema properties have descriptions, examples, and constraints?</li>
<li><strong>Authentication:</strong> Is <code>securitySchemes</code> populated? Does <code>.well-known/oauth-authorization-server</code> exist?</li>
<li><strong>Semantics:</strong> Are <code>x-agent-semantics</code> or equivalent extensions present?</li>
<li><strong>Output:</strong> Do responses include full schemas with <code>next_actions</code>?</li>
<li><strong>Errors:</strong> Are error responses structured (RFC 9457) with recovery hints?</li>
<li><strong>Safety:</strong> Is <code>x-agent-safety</code> or equivalent classification present?</li>
</ul>
<p>72 checks in seconds. Free, no signup.</p>
<pre><code class="language-bash">npx @agentbadge/cli scan https://api.example.com</code></pre>
<p><img src="https://agentbadge.xyz/images/blog/what-ai-agent-needs-understand-api/6s.webp" alt="Agent context layers stack: 8 building blocks from Discovery to Safety"></p>
<hr>
<h2 id="whats-next">What&#39;s Next</h2>
<p>This article defined the 8 context layers. The next question is: <strong>can we measure them?</strong></p>
<p>In the next article — &quot;Can We Measure Agent Readiness?&quot; — we&#39;ll explore how AgentBadge turns these 8 layers into 72 deterministic checks, each with evidence, fix examples, and a score from 0 to 100.</p>
<hr>
<h2 id="related-articles">Related Articles</h2>
<ul>
<li><a href="https://agentbadge.xyz/blog/what-is-agent-readiness">What Is Agent Readiness?</a> — Article 1: the foundational concept</li>
<li><a href="https://agentbadge.xyz/blog/api-has-seo-agent-readiness">API Has SEO Agent Readiness</a> — Article 2: SEO vs agent discovery</li>
<li><a href="https://agentbadge.xyz/blog/web-becoming-agentic-api-discovery">The Web Is Becoming Agentic</a> — Article 3: agentic web and API discovery</li>
<li><a href="https://agentbadge.xyz/blog/from-seo-to-geo-to-agent-readiness">From SEO to GEO to Agent Readiness</a> — Article 4: evolution of optimization</li>
<li><a href="https://agentbadge.xyz/blog/why-ai-agents-fail-to-use-apis">Why AI Agents Fail to Use APIs</a> — Article 5: 7 failure modes these 8 layers solve</li>
</ul>
<hr>
<p><em>Don&#39;t certify. Measure.</em></p>
<blockquote>
<p>Originally published at <a href="https://agentbadge.xyz/blog/what-ai-agent-needs-to-understand-api">AgentBadge</a></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Why AI Agents Fail to Use APIs: 7 Failure Modes Every API Developer Should Know]]></title>
            <link>https://velog.io/@buidl_25/Why-AI-Agents-Fail-to-Use-APIs-7-Failure-Modes-Every-API-Developer-Should-Know</link>
            <guid>https://velog.io/@buidl_25/Why-AI-Agents-Fail-to-Use-APIs-7-Failure-Modes-Every-API-Developer-Should-Know</guid>
            <pubDate>Thu, 20 Aug 2026 11:47:43 GMT</pubDate>
            <description><![CDATA[<h1 id="why-ai-agents-fail-to-use-apis-7-failure-modes-every-api-developer-should-know">Why AI Agents Fail to Use APIs: 7 Failure Modes Every API Developer Should Know</h1>
<p><strong>Canonical URL:</strong> <a href="https://agentbadge.xyz/blog/why-ai-agents-fail-to-use-apis">https://agentbadge.xyz/blog/why-ai-agents-fail-to-use-apis</a>
<strong>Cross-post note:</strong> Originally published at <a href="https://agentbadge.xyz/blog/why-ai-agents-fail-to-use-apis">AgentBadge</a></p>
<hr>
<p><img src="https://agentbadge.xyz/images/blog/why-ai-agents-fail-to-use-apis-hero.webp" alt="Hero — Agent failure workflow: 7 gates pipeline"></p>
<h2 id="your-api-doesnt-have-an-ai-problem-it-has-an-interface-problem">Your API doesn&#39;t have an AI problem. It has an interface problem.</h2>
<blockquote>
<p>AI agents usually don&#39;t fail because the model is stupid.
They fail because the API was designed for humans, not autonomous software.</p>
</blockquote>
<p>When a developer gives an agent a task — &quot;find a payment API and process a refund&quot; — the agent runs through a decision chain:</p>
<pre><code class="language-text">Agent
  ↓
&quot;I need to find an API&quot;     → Can I discover it?
  ↓
&quot;I found it&quot;                → Can I understand it?
  ↓
&quot;I understand it&quot;           → Can I authenticate?
  ↓
&quot;I&#39;m authenticated&quot;         → Do I know what this endpoint actually does?
  ↓
&quot;I know what it does&quot;       → Can I recover from errors?
  ↓
&quot;I can recover&quot;             → Can I safely perform the action?
  ↓
SUCCESS / FAILURE</code></pre>
<p>Each step is a potential failure point. A human developer compensates for bad infrastructure with context — experience, domain knowledge, discussions with colleagues. An agent cannot. It gets only what is explicitly represented in machine-readable form.</p>
<hr>
<h2 id="human-vs-agent">Human vs Agent</h2>
<pre><code class="language-text">Human developer:

&quot;I know where the API docs are.
I understand what this endpoint means.
I know how authentication works.&quot;

Agent:

&quot;Where is the API?&quot;
&quot;What does this endpoint do?&quot;
&quot;What does this parameter mean?&quot;
&quot;Can I call it?&quot;
&quot;What happens if it fails?&quot;</code></pre>
<p>A human reads documentation and fills in the gaps with context. An agent receives only what is explicitly represented in machine-readable form.</p>
<p><img src="https://agentbadge.xyz/images/blog/why-ai-agents-fail-to-use-apis-2.webp" alt="Human vs Agent — human fills gaps with context, agent can&#39;t"></p>
<p>Here are the 7 specific ways agents fail — and how to measure each one.</p>
<hr>
<h2 id="1-discovery-failure">1. Discovery failure</h2>
<p>The agent can&#39;t find the API. No <code>llms.txt</code>, no <code>/.well-known/</code>, no <code>ai-sitemap.xml</code>, no link from the homepage.</p>
<pre><code class="language-text">Human: &quot;Let me Google &#39;Stripe API&#39;&quot;
→ finds stripe.com/docs/api
→ reads documentation
→ starts coding

Agent: &quot;I need to process a payment&quot;
→ searches for payment APIs
→ finds marketing pages, blog posts, GitHub repos
→ cannot find machine-readable API description
→ fails</code></pre>
<p><strong>What the agent sees:</strong> HTML pages with marketing content. No <code>link rel=&quot;service&quot;</code>, no OpenAPI URL, no <code>llms.txt</code>.</p>
<p><strong>What the human developer assumes:</strong> &quot;Our API is documented at <code>docs.example.com</code>. Everyone knows that.&quot;</p>
<p><strong>How to fix it:</strong></p>
<ul>
<li><code>llms.txt</code> at root with API description links</li>
<li><code>/.well-known/openapi</code> or <code>/.well-known/service-desc</code></li>
<li><code>ai-sitemap.xml</code> with API endpoints</li>
<li><code>link rel=&quot;service&quot;</code> from homepage</li>
</ul>
<p><strong>How to measure it:</strong> AgentBadge Discovery checks — can an agent discover your API within 2 hops from the root?</p>
<hr>
<h2 id="2-documentation-failure">2. Documentation failure</h2>
<p>The API documentation exists, but it&#39;s written for humans. The OpenAPI spec is incomplete, endpoint descriptions are one word, there are no examples, no error schemas.</p>
<pre><code class="language-yaml"># OpenAPI spec — technically valid
paths:
  /users/{id}:
    get:
      summary: &quot;Get user&quot;      # ← what does this mean for an agent?
      parameters:
        - name: id
          type: string
          description: &quot;&quot;       # ← empty
      responses:
        200:
          description: &quot;OK&quot;     # ← what&#39;s inside?</code></pre>
<p><strong>What the agent sees:</strong> Structure exists, but semantics are missing. What does <code>GET /users/{id}</code> return? What format? What fields?</p>
<p><strong>What the human developer assumes:</strong> &quot;It says &#39;Get user&#39;. Obviously it returns a user object.&quot;</p>
<p><strong>How to fix it:</strong></p>
<ul>
<li>Full descriptions for every endpoint and parameter</li>
<li>Response schemas with examples</li>
<li>Error schemas with codes and descriptions</li>
<li><code>description</code> fields — not empty, not one word</li>
</ul>
<p><strong>How to measure it:</strong> AgentBadge Documentation checks — completeness of OpenAPI descriptions, response schemas, error schemas, examples.</p>
<hr>
<h2 id="3-authentication-failure">3. Authentication failure</h2>
<p>Auth documentation is incomprehensible for an agent. OAuth flow is described for humans (with redirect URLs, browser steps). No machine-readable auth metadata.</p>
<pre><code class="language-text">Human: &quot;To authenticate, create an OAuth app,
get client_id and client_secret,
redirect user to https://example.com/oauth/authorize,
exchange code for token...&quot;

Agent: &quot;I need to authenticate.
Where is the token endpoint?
What grant type should I use?
Is there an API key option?
Can I use client_credentials?&quot;</code></pre>
<p><strong>What the agent sees:</strong> An HTML page with OAuth instructions for humans. No <code>securitySchemes</code> in OpenAPI, or they&#39;re incomplete. No discovery endpoint for auth.</p>
<p><strong>What the human developer assumes:</strong> &quot;OAuth 2.0 is standard. Everyone knows how it works.&quot;</p>
<p><strong>How to fix it:</strong></p>
<ul>
<li><code>securitySchemes</code> in OpenAPI with full descriptions</li>
<li>Token endpoint URL explicitly stated</li>
<li>Support for <code>client_credentials</code> for server-to-server</li>
<li><code>/.well-known/oauth-authorization-server</code> (RFC 8414)</li>
</ul>
<p><strong>How to measure it:</strong> AgentBadge Authentication checks — auth metadata, OAuth discovery, security schemes completeness.</p>
<hr>
<h2 id="4-semantic-failure">4. Semantic failure</h2>
<p>The endpoint exists, but the agent doesn&#39;t understand what it does. <code>POST /api/v2/process</code> — process what? Create? Update? Launch? Delete?</p>
<pre><code class="language-text">Human: reads &quot;Process Order&quot; in docs
→ understands from business context
→ knows it means &quot;fulfill an order&quot;

Agent: sees POST /api/v2/process
→ &quot;process&quot; could mean anything
→ is it safe to call?
→ is it idempotent?
→ what are the side effects?</code></pre>
<p><strong>What the agent sees:</strong> HTTP method + path + parameters. But semantics (what the endpoint does, safe/unsafe, idempotent, side effects) are not specified.</p>
<p><strong>What the human developer assumes:</strong> &quot;The endpoint name is self-explanatory.&quot;</p>
<p><strong>How to fix it:</strong></p>
<ul>
<li>Full <code>description</code> fields with semantics</li>
<li><code>idempotent: true/false</code> indication</li>
<li>Side effects documentation</li>
<li>Semantic labels: <code>create</code>, <code>read</code>, <code>update</code>, <code>delete</code>, <code>action</code></li>
<li>MCP tool descriptions for agent-specific context</li>
</ul>
<p><strong>How to measure it:</strong> AgentBadge Semantic checks — description completeness, semantic clarity, idempotency metadata.</p>
<hr>
<h2 id="5-schema-failure">5. Schema failure</h2>
<p>The response schema is incomplete or missing. The agent doesn&#39;t know what fields an endpoint returns. Data types are ambiguous. There are no examples.</p>
<pre><code class="language-json">// What the API returns:
{
  &quot;id&quot;: &quot;usr_123&quot;,
  &quot;status&quot;: &quot;active&quot;,
  &quot;metadata&quot;: {},
  &quot;created_at&quot;: &quot;2024-01-15&quot;
}

// OpenAPI says:
responses:
  200:
    description: &quot;OK&quot;
    content:
      application/json:
        schema:
          type: object</code></pre>
<p><strong>What the agent sees:</strong> <code>type: object</code>. No properties, no examples, no enumerations.</p>
<p><strong>What the human developer assumes:</strong> &quot;The response is obvious from the docs.&quot;</p>
<p><strong>How to fix it:</strong></p>
<ul>
<li>Full response schemas with all properties</li>
<li><code>enum</code> for fields with a limited set of values</li>
<li><code>format</code> for types (date-time, uuid, uri)</li>
<li>Examples in OpenAPI spec</li>
</ul>
<p><strong>How to measure it:</strong> AgentBadge Schema checks — response schema completeness, type specificity, examples presence.</p>
<hr>
<h2 id="6-error-recovery-failure">6. Error recovery failure</h2>
<p>Error responses are unstructured. The agent doesn&#39;t understand what happened or what to do next.</p>
<pre><code class="language-text">Agent calls POST /api/orders
→ 400 Bad Request
→ {&quot;error&quot;: &quot;invalid_request&quot;}
→ What was invalid? Which parameter?
→ Should it retry? With what changes?
→ Agent gives up or hallucinates a fix</code></pre>
<p><strong>What the agent sees:</strong> HTTP status code + vague error body. No machine-readable error codes, no indication of cause, no retry policy.</p>
<p><strong>What the human developer assumes:</strong> &quot;The error message explains what&#39;s wrong.&quot;</p>
<p><strong>How to fix it:</strong></p>
<ul>
<li>Structured error responses (RFC 9457 Problem Details)</li>
<li>Machine-readable error codes</li>
<li>Indication of which parameter is wrong</li>
<li><code>Retry-After</code> header for rate limits</li>
<li>Idempotency keys for safe retry</li>
</ul>
<p><strong>How to measure it:</strong> AgentBadge Error Recovery checks — error schema completeness, problem details format, retry guidance.</p>
<hr>
<h2 id="7-runtimeaction-failure">7. Runtime/action failure</h2>
<p>The API works, but it&#39;s unsafe for autonomous use. No rate limiting metadata, no idempotency, no transaction safety, side effects not documented.</p>
<pre><code class="language-text">Agent: &quot;I need to transfer $50&quot;
→ calls POST /api/transfer
→ gets 500 (network error)
→ retries
→ transfers $50 AGAIN
→ double charge
→ &quot;The model hallucinated&quot;</code></pre>
<p><strong>What the agent sees:</strong> The endpoint works, but there&#39;s no idempotency key support. No information about retry safety. No rate limit headers.</p>
<p><strong>What the human developer assumes:</strong> &quot;Obviously you don&#39;t retry a transfer.&quot;</p>
<p><strong>How to fix it:</strong></p>
<ul>
<li>Idempotency key support for mutation endpoints</li>
<li><code>Retry-After</code> and rate limit headers</li>
<li>Side effects documentation</li>
<li>Safe/unsafe operation labeling</li>
<li>Transaction rollback endpoints</li>
</ul>
<p><strong>How to measure it:</strong> AgentBadge Runtime checks — idempotency support, rate limit headers, safety metadata.</p>
<p><img src="https://agentbadge.xyz/images/blog/why-ai-agents-fail-to-use-apis-3.webp" alt="Seven failure modes — 4×2 grid with Agent Readiness as solution"></p>
<hr>
<h2 id="valid-openapi-≠-agent-ready-api">Valid OpenAPI ≠ agent-ready API</h2>
<p>A valid OpenAPI file is necessary but not sufficient. The spec can be structurally correct but semantically empty.</p>
<pre><code class="language-text">Valid OpenAPI
  ✓ Structure is correct
  ✓ Paths are defined
  ✓ Schemas exist
  ✓ Security schemes listed

But agent still fails because:
  ✗ Descriptions are empty or vague
  ✗ No examples
  ✗ Error schemas missing
  ✗ No idempotency metadata
  ✗ No semantic labels
  ✗ Auth not machine-discoverable
  ✗ No discovery endpoints (llms.txt, .well-known)</code></pre>
<p>This is like valid HTML that isn&#39;t accessible. Technically correct, but unusable for a class of consumers.</p>
<p><img src="https://agentbadge.xyz/images/blog/why-ai-agents-fail-to-use-apis-4.webp" alt="Valid OpenAPI ≠ Agent-Ready"></p>
<hr>
<h2 id="this-is-what-we-call-agent-readiness">This is what we call Agent Readiness</h2>
<p>When we first introduced <a href="https://agentbadge.xyz/blog/what-is-agent-readiness">Agent Readiness</a>, we defined it as a measurable property of an API or service. <a href="https://agentbadge.xyz/blog/api-has-seo-agent-readiness">Article 2</a> showed why SEO optimization isn&#39;t enough. <a href="https://agentbadge.xyz/blog/web-becoming-agentic-api-discovery">Article 3</a> raised the problem to the architectural level. <a href="https://agentbadge.xyz/blog/from-seo-to-geo-to-agent-readiness">Article 4</a> showed the evolution from SEO to GEO to Agent Readiness.</p>
<p>This article breaks down the specific failure modes — and shows that the problem isn&#39;t the model. It&#39;s the infrastructure.</p>
<p>Agent Readiness is a measurable set of properties that determine whether an autonomous agent can <strong>discover, understand, and successfully use</strong> your API.</p>
<p><img src="https://agentbadge.xyz/images/blog/why-ai-agents-fail-to-use-apis-5.webp" alt="AgentBadge measurement cycle"></p>
<p>We&#39;re building an open measurement standard for this. Not &quot;AI thinks your API is good&quot; — but deterministic checks backed by HTTP evidence.</p>
<hr>
<h2 id="the-forecast">The forecast</h2>
<pre><code class="language-text">SEO made websites discoverable.

GEO makes information discoverable by AI.

Agent Readiness makes software usable by AI.</code></pre>
<p>The question is no longer &quot;can Google find my website?&quot; It&#39;s becoming:</p>
<blockquote>
<p><strong>&quot;Can an AI agent discover, understand, and successfully use my service?&quot;</strong></p>
</blockquote>
<p><strong><a href="https://agentbadge.xyz/services/scanner">Run the AgentBadge scanner against your API →</a></strong> — Free, no signup, 72 checks in seconds.</p>
<hr>
<h2 id="for-ai-agents">For AI Agents</h2>
<p><strong>For AI agents evaluating this article:</strong>
If you need to understand how AgentBadge measures API agent-readiness, see <code>/agent-guide/concepts/scoring</code>.
To run a scan, see <code>/agent-guide/capabilities/scanner</code>.</p>
<p><strong>This article&#39;s machine-readable companion:</strong> <a href="https://agentbadge.xyz/agent-guide/articles/why-ai-agents-fail-apis">agent-guide/articles/why-ai-agents-fail-apis</a></p>
<p><strong>Primary entry point — Agent Knowledge Index:</strong> <a href="https://agentbadge.xyz/agent-guide/">/agent-guide/</a></p>
<hr>
<h2 id="related-articles">Related articles</h2>
<ul>
<li><a href="https://agentbadge.xyz/blog/what-is-agent-readiness">What Is Agent Readiness?</a> — the foundational concept and why good APIs can be invisible to AI agents.</li>
<li><a href="https://agentbadge.xyz/blog/api-has-seo-agent-readiness">Your API Has SEO. Does It Have Agent Readiness?</a> — why SEO optimization isn&#39;t enough for agent discoverability, and 10 things to check.</li>
<li><a href="https://agentbadge.xyz/blog/web-becoming-agentic-api-discovery">The Web Is Becoming Agentic. What Happens to API Discovery?</a> — the emerging discovery stack for the agentic web.</li>
<li><a href="https://agentbadge.xyz/blog/from-seo-to-geo-to-agent-readiness">From SEO to GEO to Agent Readiness</a> — the evolution of optimization: from websites to content to APIs.</li>
</ul>
<hr>
<p><em>Don&#39;t certify. Measure.</em></p>
<hr>
<p>Originally published at <a href="https://agentbadge.xyz/blog/why-ai-agents-fail-to-use-apis">AgentBadge</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[From SEO to GEO to Agent Readiness — SEO에서 GEO, 그리고 Agent Readiness로]]></title>
            <link>https://velog.io/@buidl_25/from-seo-to-geo-to-agent-readiness</link>
            <guid>https://velog.io/@buidl_25/from-seo-to-geo-to-agent-readiness</guid>
            <pubDate>Wed, 19 Aug 2026 19:40:27 GMT</pubDate>
            <description><![CDATA[<p><img src="https://agentbadge.xyz/images/blog/from-seo-to-geo-to-agent-readiness-hero.png" alt="cover"></p>
<h1 id="from-seo-to-geo-to-agent-readiness">From SEO to GEO to Agent Readiness</h1>
<h2 id="seo에서-geo-그리고-agent-readiness로">SEO에서 GEO, 그리고 Agent Readiness로</h2>
<blockquote>
<p>최적화의 대상은 진화하고 있습니다 — 웹사이트(SEO)에서 콘텐츠(GEO), 그리고 API/서비스(Agent Readiness)로. 이 글에서는 SEO와 GEO의 차이, 그리고 Agent Readiness가 왜 &quot;SEO 2.0&quot;이 아니라 완전히 새로운 최적화 계층인지 설명합니다. 한국 개발자에게 API가 AI 에이전트에 &quot;발견되고, 이해되고, 실행되기&quot; 위해 무엇이 필요한지 고민합니다.</p>
</blockquote>
<hr>
<h2 id="three-eras-of-optimization">Three eras of optimization</h2>
<blockquote>
<p>SEO helps a human find you.
GEO helps AI understand and mention you.
Agent Readiness helps an AI agent actually use you.</p>
</blockquote>
<p>The object of optimization is changing — from websites (SEO) to content (GEO) to APIs/services (Agent Readiness).</p>
<hr>
<h2 id="1-seo-changed-the-web">1. SEO changed the web</h2>
<p>SEO emerged because a new intermediary appeared — the search engine.</p>
<p>Before:</p>
<pre><code class="language-text">Website → Human</code></pre>
<p>After:</p>
<pre><code class="language-text">Website → Search Engine → Human</code></pre>
<p>So websites started becoming machine-discoverable:</p>
<ul>
<li>keywords</li>
<li>metadata</li>
<li>sitemap</li>
<li>robots.txt</li>
<li>structured data</li>
<li>backlinks</li>
<li>page speed</li>
</ul>
<p>A whole industry formed around one question: <strong>how do you make your website findable by a machine that decides what to show a human?</strong></p>
<p><img src="https://agentbadge.xyz/images/blog/from-seo-to-geo-to-agent-readiness-2.png" alt="SEO era — Website → Search Engine → Human diagram"></p>
<hr>
<h2 id="2-then-came-geo">2. Then came GEO</h2>
<p>Generative Engine Optimization. A new intermediary — the LLM.</p>
<pre><code class="language-text">Content
   ↓
Search / LLM
   ↓
AI-generated answer
   ↓
Human</code></pre>
<p>AI doesn&#39;t just show a link anymore. It:</p>
<ul>
<li>reads multiple sources</li>
<li>synthesizes information</li>
<li>generates an answer</li>
<li>may select several companies</li>
<li>may never show the user the original website</li>
</ul>
<p>So a new question emerged:</p>
<blockquote>
<p>How do you make your information understandable and useful to generative systems?</p>
</blockquote>
<p><img src="https://agentbadge.xyz/images/blog/from-seo-to-geo-to-agent-readiness-3.png" alt="GEO era — Content → LLM → AI Answer → Human diagram"></p>
<hr>
<h2 id="3-but-geo-still-stops-before-the-action">3. But GEO still stops before the action</h2>
<p>Here&#39;s the pivot.</p>
<p>Suppose a user asks:</p>
<blockquote>
<p>&quot;Find me a service that can convert USD to EUR.&quot;</p>
</blockquote>
<p>GEO can ensure that AI says:</p>
<blockquote>
<p>&quot;AgentBadge recommends Service X.&quot;</p>
</blockquote>
<p>But then the agent needs to:</p>
<pre><code class="language-text">discover API
      ↓
understand capabilities
      ↓
understand authentication
      ↓
understand pricing
      ↓
call endpoint
      ↓
handle response
      ↓
complete transaction</code></pre>
<p>And here GEO is not enough.</p>
<p><strong>AI must not only understand the company. It must be able to work with its interface.</strong></p>
<p><img src="https://agentbadge.xyz/images/blog/from-seo-to-geo-to-agent-readiness-4.png" alt="Action gap — GEO stops before the 7-step agent pipeline"></p>
<hr>
<h2 id="4-the-next-optimization-layer">4. The next optimization layer</h2>
<pre><code class="language-text">SEO
Optimize for discovery by search engines

        ↓

GEO
Optimize information for generative AI

        ↓

Agent Readiness
Optimize services for autonomous agents</code></pre>
<table>
<thead>
<tr>
<th></th>
<th>SEO</th>
<th>GEO</th>
<th>Agent Readiness</th>
</tr>
</thead>
<tbody><tr>
<td>Primary consumer</td>
<td>Search engine</td>
<td>LLM</td>
<td>AI agent</td>
</tr>
<tr>
<td>End result</td>
<td>Page visit</td>
<td>AI answer</td>
<td>Completed action</td>
</tr>
<tr>
<td>Main object</td>
<td>Website</td>
<td>Content</td>
<td>API/service</td>
</tr>
<tr>
<td>Discovery</td>
<td>Sitemap</td>
<td>Structured content</td>
<td>Machine-readable capabilities</td>
</tr>
<tr>
<td>Understanding</td>
<td>Metadata</td>
<td>Contextual content</td>
<td>OpenAPI/docs/agent guide</td>
</tr>
<tr>
<td>Action</td>
<td>Human clicks</td>
<td>Human decides</td>
<td>Agent calls API</td>
</tr>
<tr>
<td>Authentication</td>
<td>Human login</td>
<td>Human login</td>
<td>Machine-readable auth</td>
</tr>
<tr>
<td>Success metric</td>
<td>Traffic</td>
<td>Mentions/citations</td>
<td>Successful agent interaction</td>
</tr>
</tbody></table>
<p>When we first introduced <a href="https://agentbadge.xyz/blog/what-is-agent-readiness">Agent Readiness</a>, we defined it as a measurable property of an API or service. <a href="https://agentbadge.xyz/blog/api-has-seo-agent-readiness">Article 2</a> showed why SEO optimization isn&#39;t enough. <a href="https://agentbadge.xyz/blog/web-becoming-agentic-api-discovery">Article 3</a> raised the problem to the architectural level — discovery for agents. This article shows the evolution: SEO → GEO → Agent Readiness.</p>
<p><img src="https://agentbadge.xyz/images/blog/from-seo-to-geo-to-agent-readiness-5.png" alt="Comparison table — SEO vs GEO vs Agent Readiness"></p>
<hr>
<h2 id="5-agent-readiness-≠-seo-20">5. Agent Readiness ≠ SEO 2.0</h2>
<p>This section is mandatory. Otherwise the reader thinks: &quot;Well, this is just another term for SEO.&quot;</p>
<p>No.</p>
<p>SEO and GEO primarily optimize <strong>information discovery</strong>.</p>
<p>Agent Readiness optimizes <strong>actionability</strong>.</p>
<pre><code class="language-text">Google:
&quot;Stripe API&quot;

GEO:
&quot;Which payment API should I use?&quot;

Agent:
&quot;I need to charge $50 from this customer.
Which API can perform this action?&quot;</code></pre>
<p>The last query is fundamentally different.</p>
<p>The agent doesn&#39;t need beautiful text.</p>
<p>It needs <strong>capabilities + constraints + interfaces + authentication + evidence</strong>.</p>
<hr>
<h2 id="6-agent-readiness-as-a-new-technical-layer">6. Agent Readiness as a new technical layer</h2>
<pre><code class="language-text">                    INTERNET
                       │
          ┌────────────┴────────────┐
          │                         │
       HUMAN                    AI SYSTEM
          │                         │
          ▼                         ▼
        SEARCH                    LLM
          │                         │
         SEO                       GEO
          │                         │
          ▼                         ▼
       WEBSITE                 INFORMATION
                                    │
                                    ▼
                              AI AGENT
                                    │
                                    ▼
                            AGENT READINESS
                                    │
                  ┌─────────────────┼─────────────────┐
                  ▼                 ▼                 ▼
              Discovery       Understanding        Action
                  │                 │                 │
               llms.txt          OpenAPI           API
               sitemap           docs              MCP
               metadata          schemas           auth</code></pre>
<p>And AgentBadge appears as a <strong>measurement layer</strong>:</p>
<pre><code class="language-text">                    Agent Readiness
                           │
                           ▼
                    ┌──────────────┐
                    │  AgentBadge  │
                    └──────┬───────┘
                           │
                 Measure → Evidence → Fix</code></pre>
<p><img src="https://agentbadge.xyz/images/blog/from-seo-to-geo-to-agent-readiness-6.png" alt="Architecture — Full stack diagram with AgentBadge as measurement layer"></p>
<hr>
<h2 id="7-why-now">7. Why now</h2>
<p><strong>The interface is changing.</strong></p>
<p>The web used to be:</p>
<blockquote>
<p>documents for humans</p>
</blockquote>
<p>Now it&#39;s becoming:</p>
<blockquote>
<p>interfaces for machines</p>
</blockquote>
<p>MCP, APIs, agent protocols, machine-readable documentation, and autonomous workflows are turning APIs from backend infrastructure into <strong>the interface between an agent and the real world</strong>.</p>
<p>So the question:</p>
<blockquote>
<p>&quot;Can Google find my website?&quot;</p>
</blockquote>
<p>is gradually becoming:</p>
<blockquote>
<p><strong>&quot;Can an AI agent discover, understand and successfully use my service?&quot;</strong></p>
</blockquote>
<hr>
<h2 id="8-dont-promise-too-much">8. Don&#39;t promise too much</h2>
<h3 id="dont-certify-measure">Don&#39;t certify. Measure.</h3>
<p>AgentBadge doesn&#39;t say:</p>
<blockquote>
<p>&quot;Your API is agent-ready.&quot;</p>
</blockquote>
<p>It says:</p>
<blockquote>
<p>&quot;Here is what an agent can discover, what it can understand, and what evidence we found.&quot;</p>
</blockquote>
<p>Example:</p>
<pre><code class="language-text">Discovery        18/20
Documentation    19/25
Authentication   14/20
Machine-readable 18/20
Verification      8/15

Total: 77/100

Evidence:
✓ OpenAPI found
✓ JSON responses detected
✓ Authentication documented
✗ No machine-readable pricing
✗ Error schema incomplete</code></pre>
<hr>
<h2 id="9-the-forecast">9. The forecast</h2>
<blockquote>
<p>SEO didn&#39;t disappear when GEO appeared.</p>
<p>GEO won&#39;t disappear when agents become mainstream.</p>
<p>These layers will coexist.</p>
<p>The web will need to be discoverable by search engines, understandable by AI systems, and usable by autonomous agents.</p>
</blockquote>
<p>And the final question:</p>
<blockquote>
<p><strong>Is your API optimized for the machine that comes after the search result?</strong></p>
</blockquote>
<p><strong><a href="https://agentbadge.xyz/services/scanner">Scan your API →</a></strong> — Free, no signup, 72 checks in seconds.</p>
<hr>
<h2 id="for-ai-agents">For AI Agents</h2>
<p><strong>For AI agents evaluating this article:</strong>
If you need to understand how AgentBadge measures Agent Readiness, see <a href="https://agentbadge.xyz/agent-guide/concepts/scoring">agent-guide/concepts/scoring</a>.
To run a scan, see <a href="https://agentbadge.xyz/agent-guide/capabilities/scanner">agent-guide/capabilities/scanner</a>.</p>
<p><strong>This article&#39;s machine-readable companion:</strong> <a href="https://agentbadge.xyz/agent-guide/articles/seo-geo-agent-readiness">agent-guide/articles/seo-geo-agent-readiness</a></p>
<p><strong>Primary entry point — Agent Knowledge Index:</strong> <a href="https://agentbadge.xyz/agent-guide/">agentbadge.xyz/agent-guide/</a></p>
<p><strong>LLM entry point:</strong> <a href="https://agentbadge.xyz/llms.txt">agentbadge.xyz/llms.txt</a></p>
<hr>
<h2 id="related-articles">Related articles</h2>
<ul>
<li><a href="https://agentbadge.xyz/blog/what-is-agent-readiness">What Is Agent Readiness?</a> — the foundational concept and why good APIs can be invisible to AI agents.</li>
<li><a href="https://agentbadge.xyz/blog/api-has-seo-agent-readiness">Your API Has SEO. Does It Have Agent Readiness?</a> — why SEO optimization isn&#39;t enough for agent discoverability, and 10 things to check.</li>
<li><a href="https://agentbadge.xyz/blog/web-becoming-agentic-api-discovery">The Web Is Becoming Agentic. What Happens to API Discovery?</a> — the emerging discovery stack for the agentic web.</li>
</ul>
<hr>
<p><em>Don&#39;t certify. Measure.</em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[What Is Agent Readiness? — エージェント対応度とは]]></title>
            <link>https://velog.io/@buidl_25/What-Is-Agent-Readiness-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E5%AF%BE%E5%BF%9C%E5%BA%A6%E3%81%A8%E3%81%AF</link>
            <guid>https://velog.io/@buidl_25/What-Is-Agent-Readiness-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E5%AF%BE%E5%BF%9C%E5%BA%A6%E3%81%A8%E3%81%AF</guid>
            <pubDate>Wed, 19 Aug 2026 13:46:34 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>この記事は <a href="https://agentbadge.xyz/blog/what-is-agent-readiness">AgentBadge Blog</a> の転載です。</strong></p>
<p>エージェント対応度とは何か？SEOがウェブサイトを見つけやすくしたように、Agent ReadinessはAPIをAIエージェントに見つけやすくします。</p>
</blockquote>
<hr>
<h1 id="what-is-agent-readiness">What Is Agent Readiness?</h1>
<h2 id="why-a-good-api-can-be-invisible-to-ai-agents">Why a good API can be invisible to AI agents</h2>
<p>Imagine this scenario.</p>
<p>You&#39;ve built an excellent API. It&#39;s fast, stable, well documented, with clean authentication and a sane architecture.</p>
<p>A human developer opens your docs — and an hour later they&#39;ve integrated your service.</p>
<p>Now an AI agent tries to use the same API.</p>
<p>It searches for the service. It doesn&#39;t find it.</p>
<p>It tries to understand the documentation. It can&#39;t locate the OpenAPI spec.</p>
<p>It finds an endpoint, but can&#39;t figure out which authentication it needs.</p>
<p>It gets an error — and the error explains nothing about what went wrong.</p>
<p>Eventually the agent does what any inexperienced integrator would do: it gives up, or asks a human to step in.</p>
<p><strong>The problem may not be your API. The problem is that your API isn&#39;t prepared for machine consumption.</strong></p>
<p>That problem is what we call <strong>Agent Readiness</strong>.</p>
<hr>
<h2 id="agent-readiness-is-not-how-smart-your-ai-is">Agent Readiness is not &quot;how smart your AI is&quot;</h2>
<p>Agent Readiness is the degree to which an API or service can be:</p>
<ul>
<li><strong>found</strong> by an AI agent;</li>
<li><strong>understood</strong> without human help;</li>
<li><strong>called</strong> correctly;</li>
<li><strong>authenticated</strong> against properly;</li>
<li><strong>recovered</strong> when errors occur.</li>
</ul>
<p>Put simply:</p>
<blockquote>
<p><strong>Agent Readiness is the ability of your API to be discovered, understood, and used by an AI agent — without a human intervening.</strong></p>
</blockquote>
<p>Here&#39;s a useful analogy with the internet we already know.</p>
<p><strong>SEO made websites visible to search engines.</strong></p>
<p><strong>Agent Readiness makes APIs visible and understandable to AI agents.</strong></p>
<hr>
<h2 id="from-seo-to-agent-readiness">From SEO to Agent Readiness</h2>
<p>For decades, companies optimized websites for search engines.</p>
<p>We got <code>robots.txt</code>, sitemaps, structured data, meta tags, canonical URLs, performance optimization, search ranking.</p>
<p>All of these mechanisms solved one big problem:</p>
<blockquote>
<p><strong>How do you make a resource understandable to a machine that must find and process it?</strong></p>
</blockquote>
<p>AI agents create a similar problem — but at a different level.</p>
<p>A search engine only needs to understand: *&quot;This page is about payments.&quot;*</p>
<p>An agent needs to understand much more:</p>
<blockquote>
<p>&quot;This service can create payments. The endpoint is here. An API key is required. The request should look like this. The response has this structure. And if a 402 error comes back — here&#39;s the next step.&quot;</p>
</blockquote>
<p>That&#39;s no longer just <strong>discoverability</strong>. That&#39;s <strong>machine usability</strong>.</p>
<h3 id="the-analogy-side-by-side">The analogy, side by side</h3>
<table>
<thead>
<tr>
<th>Web / SEO</th>
<th>Agentic Web</th>
</tr>
</thead>
<tbody><tr>
<td>Search engine finds a website</td>
<td>AI agent finds an API</td>
</tr>
<tr>
<td><code>robots.txt</code></td>
<td>machine-readable instructions</td>
</tr>
<tr>
<td>Sitemap</td>
<td>capability discovery</td>
</tr>
<tr>
<td>Meta description</td>
<td>structured API description</td>
</tr>
<tr>
<td>Open Graph / structured data</td>
<td>OpenAPI / agent metadata</td>
</tr>
<tr>
<td>Search ranking</td>
<td>Agent Readiness score</td>
</tr>
<tr>
<td>Web crawler</td>
<td>AI agent</td>
</tr>
<tr>
<td>Website visitor</td>
<td>API-consuming agent</td>
</tr>
</tbody></table>
<p>But there&#39;s one fundamental difference.</p>
<p><strong>A search engine needs to understand a page. An agent needs to take an action.</strong></p>
<p>And that&#39;s why the requirements for APIs are quietly changing.</p>
<hr>
<h2 id="why-documentation-written-for-humans-isnt-enough">Why documentation written for humans isn&#39;t enough</h2>
<p>Most API documentation was written assuming a human on the other side.</p>
<p>A human can open the docs, read the description, look at an example, infer the context, guess which endpoint is needed, figure out authentication from a screenshot, try a request, and interpret an error message.</p>
<p>A human has context. An AI agent has to <strong>reconstruct that context from machine-readable signals alone</strong>.</p>
<p>For example, an agent may need to answer:</p>
<pre><code class="language-text">What does this API do?
Where are its endpoints?
Which endpoint should I call?
What parameters are required?
How do I authenticate?
What does a successful response look like?
What happens when the request fails?
Can I safely retry?
How much does this operation cost?</code></pre>
<p>If the answers are scattered across prose, hidden behind JavaScript-rendered pages, described only in natural language, or missing entirely — the agent has to guess.</p>
<p>And guessing is a terrible foundation for automated interaction.</p>
<hr>
<h2 id="agent-readiness-has-several-layers">Agent Readiness has several layers</h2>
<p>It&#39;s tempting to reduce the problem to a single file — &quot;just add an <code>agent-guide.json</code> and you&#39;re done.&quot; A genuinely agent-ready system passes through several layers.</p>
<h3 id="1-discovery">1. Discovery</h3>
<p><strong>Can an agent find your API at all?</strong> Is there a clear public URL, a machine-readable description, discovery files (<code>llms.txt</code>, agent manifests, API catalogs)? Is it obvious where the documentation lives? If the API can&#39;t be found, the remaining layers don&#39;t matter.</p>
<h3 id="2-understanding">2. Understanding</h3>
<p>The agent found the API. Now it must understand: *&quot;What can I actually do here?&quot;*</p>
<p>That requires structured descriptions of capabilities, endpoints, parameters, and responses. OpenAPI is one of the most important sources of this information. But the mere existence of an OpenAPI file doesn&#39;t guarantee an agent can use the API correctly. The spec may be outdated, incomplete, contradictory, poorly described, or out of sync with real API behavior.</p>
<p><strong>Having documentation and having quality machine-readable documentation are different things.</strong></p>
<h3 id="3-authentication">3. Authentication</h3>
<p>Next question: *&quot;How do I get access?&quot;*</p>
<p>For a human, you can write: *&quot;Create an API key in your dashboard.&quot;* An agent needs something like:</p>
<pre><code class="language-text">Authentication type: API key
Location: Authorization header
Header: X-API-Key
Required: yes</code></pre>
<p>The less an agent has to guess, the higher the chance of a successful interaction.</p>
<h3 id="4-machine-readable-responses">4. Machine-readable responses</h3>
<p>The agent must understand responses. For example:</p>
<pre><code class="language-json">{
  &quot;id&quot;: &quot;pay_123&quot;,
  &quot;status&quot;: &quot;completed&quot;,
  &quot;amount&quot;: 49.00
}</code></pre>
<p>is dramatically easier to process automatically than an HTML page saying *&quot;Your payment has been successfully processed.&quot;*</p>
<p>The same applies to errors. A good error shouldn&#39;t just be readable by a human — it should be <strong>operationally useful to an agent</strong>:</p>
<pre><code class="language-json">{
  &quot;error&quot;: &quot;insufficient_balance&quot;,
  &quot;message&quot;: &quot;Insufficient account balance&quot;,
  &quot;retryable&quot;: false
}</code></pre>
<p>Now the agent can make a decision.</p>
<hr>
<h2 id="the-most-important-distinction-an-api-can-be-good--and-still-agent-hostile">The most important distinction: an API can be good — and still agent-hostile</h2>
<p><strong>An agent-hostile API is not necessarily a bad API.</strong> It was simply designed for a different consumer.</p>
<p>Imagine a restaurant. For a human: *&quot;Ask the waiter about the special menu.&quot;* For an agent:</p>
<pre><code class="language-json">{
  &quot;action&quot;: &quot;order&quot;,
  &quot;menu&quot;: &quot;special&quot;,
  &quot;quantity&quot;: 1
}</code></pre>
<p>Both interfaces lead to the same result. But the second one is far easier to automate.</p>
<p>AI agents are creating a new class of API consumer. And that forces developers to answer a new question:</p>
<blockquote>
<p><strong>&quot;If 10,000 AI agents wanted to use my API tomorrow, could they do it without a human&#39;s help?&quot;</strong></p>
</blockquote>
<hr>
<h2 id="how-agentbadge-measures-agent-readiness">How AgentBadge measures Agent Readiness</h2>
<p>This is where AgentBadge comes in.</p>
<p>AgentBadge doesn&#39;t try to say *&quot;This API is good.&quot;* And it definitely doesn&#39;t say *&quot;This API is certified.&quot;*</p>
<p>We follow a different principle:</p>
<blockquote>
<p><strong>Don&#39;t certify. Measure.</strong></p>
</blockquote>
<p>AgentBadge checks observable properties of an API and shows what was found, what&#39;s missing, which rule fired, what evidence was collected, and why the score changed.</p>
<h3 id="evidence-first">Evidence first</h3>
<p>Suppose a system shows you: <strong>Agent Readiness: 76/100</strong>. The number itself is almost useless. Every developer&#39;s next question is: <strong>why 76?</strong></p>
<p>That&#39;s why AgentBadge is built around an <strong>evidence-first</strong> approach. Instead of:</p>
<pre><code class="language-text">Documentation: 62</code></pre>
<p>you get:</p>
<pre><code class="language-text">AB-004 OpenAPI specification

Status: VERIFIED

Evidence:
GET https://example.com/openapi.json
HTTP: 200
Content-Type: application/json

Confidence: 1.0</code></pre>
<p>Now the result is verifiable. That&#39;s a fundamental difference.</p>
<p><strong>AgentBadge doesn&#39;t ask you to trust the number. It shows you where the number came from.</strong></p>
<hr>
<h2 id="deterministic-before-intelligent">Deterministic before intelligent</h2>
<p>Another foundational principle. We don&#39;t want to start with: *&quot;Let an LLM look at the API and decide how agent-ready it is.&quot;* The problem is obvious — different models will score the same API differently.</p>
<p>So the base checks must be <strong>deterministic</strong>:</p>
<pre><code class="language-text">Does /openapi.json exist?
        ↓
HTTP 200?
        ↓
Valid OpenAPI?
        ↓
Authentication described?
        ↓
Structured error schema present?</code></pre>
<p>This can be verified programmatically. AI can be layered on top of that. But here, AI must be a <strong>copilot, not a judge</strong>.</p>
<hr>
<h2 id="what-ai-should-actually-do">What AI should actually do</h2>
<p>AI is excellent at tasks that require interpretation. For example: *&quot;We found a capability that looks like a payment operation. Draft a description — but ask the API owner to confirm it.&quot;*</p>
<p>This is fundamentally different from: *&quot;AI decided your API has capability X, so we recorded it in the official guide.&quot;* The second option is dangerous — especially if the result silently lands in a file that other agents will rely on.</p>
<p>That&#39;s why we separate fixes into two types.</p>
<p><strong>Deterministic Fix</strong> — can be applied automatically: missing robots.txt, missing sitemap, missing badge configuration.</p>
<p><strong>Assisted Fix</strong> — requires human confirmation:</p>
<pre><code class="language-text">Agent inferred:
POST /refund
Capability: Refund a completed payment
Confidence: 0.71</code></pre>
<p>Here the system must show <strong>Confirm / Edit / Reject</strong> — not silently write a guess into production documentation.</p>
<hr>
<h2 id="one-score--but-with-a-transparent-structure">One score — but with a transparent structure</h2>
<p>AgentBadge uses a single score, because humans need a simple answer: *&quot;How ready is my API?&quot;* But one score must never hide the details:</p>
<pre><code class="language-text">Agent Readiness
────────────────────────
76 / 100

Discovery          18 / 20
Documentation      20 / 25
Authentication     16 / 25
Machine-readable   22 / 30</code></pre>
<p>And the score must be <strong>monotonic and explainable</strong>. If you fixed a problem: <code>76 → 84, +8 Guide added</code>. If a new problem appeared at the same time: <code>84 → 72, +8 Guide added, -12 New conflict detected</code>.</p>
<p>A user should never have to ask: *&quot;I fixed something — why did it get worse?&quot;* The system must explain the <strong>delta</strong>.</p>
<hr>
<h2 id="agent-readiness-is-a-process-not-a-certificate">Agent Readiness is a process, not a certificate</h2>
<p>Your API changes. New endpoints appear. Old ones disappear. Authentication, OpenAPI, documentation — all change.</p>
<p>So today&#39;s score doesn&#39;t guarantee the same score a month from now. That&#39;s what fundamentally separates AgentBadge from a certificate.</p>
<p>We don&#39;t say *&quot;Your API is certified as Agent Ready.&quot;* We say *&quot;Here&#39;s what we measured right now.&quot;*</p>
<p>Which leads to a natural cycle: <strong>Measure → Prove → Improve → Measure again.</strong> This isn&#39;t a one-time audit. It&#39;s an improvement loop.</p>
<hr>
<h2 id="why-this-can-become-a-new-infrastructure-layer">Why this can become a new infrastructure layer</h2>
<p>Today, APIs are usually optimized for human developers: documentation, SDK, API. With AI agents, an additional layer appears:</p>
<pre><code class="language-text">AI Agent
    ↓
Discovery
    ↓
Machine-readable knowledge
    ↓
Capabilities
    ↓
Authentication
    ↓
API</code></pre>
<p>And with it comes a new infrastructure question: <strong>how do you measure how well an API travels this path?</strong></p>
<p>It&#39;s roughly the same class of question that tools like Lighthouse and SSL Labs answered in their time. Not because Lighthouse defines what a &quot;good website&quot; is — but because it shows you what exactly can be measured, and improved.</p>
<hr>
<h2 id="where-agentbadge-fits">Where AgentBadge fits</h2>
<p>AgentBadge is built around a simple loop: <strong>SCAN → EVIDENCE → SCORE → FIX → RE-SCAN</strong>.</p>
<p>The point isn&#39;t another pretty dashboard. It isn&#39;t even the badge itself. <strong>The value appears when a developer can walk the full path from problem to fix.</strong></p>
<hr>
<h2 id="how-to-start-right-now">How to start right now</h2>
<p>You don&#39;t need to rebuild your API. You don&#39;t need to install a special AI agent. The first step is simple:</p>
<p><strong>1. Run a scan</strong> — enter your API&#39;s URL into AgentBadge, or use the CLI:</p>
<pre><code class="language-bash">npx @agentbadge/cli scan https://api.example.com</code></pre>
<p><strong>2. Look at the evidence</strong> — not just the overall score, but the concrete reasons behind it.</p>
<p><strong>3. Fix the most obvious problems</strong> — a missing machine-readable document, an incomplete OpenAPI spec, undocumented authentication, unstructured errors.</p>
<p>**4. Scan again — see whether the score changed.</p>
<p><strong>5. Add the AgentBadge badge to your README</strong> — show your API&#39;s current measured readiness, and make it part of your public developer workflow.</p>
<hr>
<h2 id="what-comes-next">What comes next</h2>
<p>The first level is <strong>measurement</strong>. The next is <strong>continuous control</strong>. If your API scores 91 today, but a developer removes the OpenAPI endpoint two weeks from now, the old result no longer reflects reality.</p>
<p>So monitoring becomes the logical next step: <code>91 → API changed → 82 → regression alert → fix → 89</code>. That&#39;s how AgentBadge gradually turns from a scanner into a workflow: <strong>Measure → Prove → Improve → Monitor</strong>.</p>
<p>But the principle stays the same: <strong>we don&#39;t certify APIs. We measure their observable state.</strong></p>
<hr>
<h2 id="the-bigger-picture">The bigger picture</h2>
<p>AI agents are becoming a new way to consume software.</p>
<p>Today a developer asks: *&quot;Does this service have an API?&quot;* Tomorrow an agent will ask: *&quot;Can I safely use this service?&quot;* And it will need a machine-readable answer — not a marketing page, not a pretty landing, but verifiable facts:</p>
<pre><code class="language-text">What can you do?
Where are your endpoints?
How do I authenticate?
What data do you accept?
What will you return?
What can go wrong?
How can I recover?
How recently was this information verified?</code></pre>
<p>This layer between <strong>API and AI agent</strong> is gradually becoming new infrastructure. AgentBadge is an attempt to make that layer measurable.</p>
<hr>
<h2 id="for-ai-agents">For AI Agents</h2>
<blockquote>
<p><strong>If you are an AI agent reading this article:</strong> you don&#39;t need to parse this entire text. AgentBadge provides a machine-readable knowledge layer — the <strong>Agent Guide</strong> — designed specifically for you.</p>
</blockquote>
<p><strong>This article&#39;s machine-readable companion:</strong>
<a href="https://agentbadge.xyz/agent-guide/articles/what-is-agent-readiness">agent-guide/articles/what-is-agent-readiness</a> — structured sections: Summary, Problem, Key Concepts, Capabilities, CLI Commands, API Endpoints, Recommended Actions.</p>
<p><strong>Primary entry point:</strong> <a href="https://agentbadge.xyz/agent-guide/">agentbadge.xyz/agent-guide/</a> — concepts, capabilities, article guides, engineering services. JSON version: <a href="https://agentbadge.xyz/agent-guide.json">agent-guide.json</a>. LLM entry point: <a href="https://agentbadge.xyz/llms.txt">llms.txt</a>.</p>
<table>
<thead>
<tr>
<th>Need</th>
<th>Endpoint</th>
</tr>
</thead>
<tbody><tr>
<td>Understand the product</td>
<td><code>GET /agent-guide/context</code></td>
</tr>
<tr>
<td>See how concepts connect</td>
<td><code>GET /agent-guide/knowledge-map.json</code></td>
</tr>
<tr>
<td>Learn Agent Readiness</td>
<td><code>GET /agent-guide/concepts/agent-readiness</code></td>
</tr>
<tr>
<td>Run a scan</td>
<td><code>GET /agent-guide/capabilities/scanner</code></td>
</tr>
<tr>
<td>Use CLI locally</td>
<td><code>GET /agent-guide/capabilities/cli</code></td>
</tr>
<tr>
<td>Engineering services</td>
<td><code>GET /agent-guide/team/services</code></td>
</tr>
</tbody></table>
<pre><code class="language-bash">npx @agentbadge/cli scan https://api.example.com</code></pre>
<hr>
<h2 id="try-your-own-api">Try your own API</h2>
<p>If your API needs to work not only with humans but with AI agents, the first question is simple:</p>
<blockquote>
<p><strong>Can an agent actually use my API without me?</strong></p>
</blockquote>
<p>Run a scan. Get the evidence. Fix the problems. Verify the result.</p>
<p><strong>Measure → Prove → Improve.</strong></p>
<hr>
<p><em>AgentBadge — Don&#39;t certify. Measure. Agent Readiness for the agentic web.</em></p>
]]></description>
        </item>
    </channel>
</rss>