<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Paul Spread</title>
    <description>The latest articles on DEV Community by Paul Spread (@spread2009).</description>
    <link>https://dev.to/spread2009</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F291783%2F9845631e-84be-4923-ac15-143423dbf9c7.png</url>
      <title>DEV Community: Paul Spread</title>
      <link>https://dev.to/spread2009</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/spread2009"/>
    <language>en</language>
    <item>
      <title>Inside an Agent Readiness Scanner: Rules, Evidence and Reproducibility</title>
      <dc:creator>Paul Spread</dc:creator>
      <pubDate>Fri, 28 Aug 2026 12:09:49 +0000</pubDate>
      <link>https://dev.to/spread2009/inside-an-agent-readiness-scanner-rules-evidence-and-reproducibility-kco</link>
      <guid>https://dev.to/spread2009/inside-an-agent-readiness-scanner-rules-evidence-and-reproducibility-kco</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Originally published at &lt;a href="https://agentbadge.xyz/blog/inside-an-agent-readiness-scanner" rel="noopener noreferrer"&gt;AgentBadge&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When someone tells you that an API has an &lt;strong&gt;87/100 Agent Readiness score&lt;/strong&gt;, the first question should not be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Is 87 a good score?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The better question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Why is it 87?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And the question after that is even more important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Can I reproduce the result myself?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the problem AgentBadge is designed to solve.&lt;/p&gt;

&lt;p&gt;Agent Readiness should not be an opinion generated by an LLM. It should be a measurable property of a service, calculated from explicit rules and supported by evidence.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Rules → Evidence → Assertions → Score → Report&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This article explains what happens inside that pipeline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ugm36e7rdmwjgc0hxyw.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ugm36e7rdmwjgc0hxyw.webp" alt="Hero — Measurement pipeline diagram" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  1. A scanner should measure, not guess
&lt;/h2&gt;

&lt;p&gt;Imagine two tools scanning the same API.&lt;/p&gt;

&lt;p&gt;Tool A says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Your API appears to be highly suitable for AI agents."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Tool B says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"AB-004 passed because &lt;code&gt;https://example.com/openapi.json&lt;/code&gt; returned HTTP 200 and contained a valid OpenAPI document."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Which result would you trust?&lt;/p&gt;

&lt;p&gt;The second one is much more useful.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;what was checked;&lt;/li&gt;
&lt;li&gt;what rule was applied;&lt;/li&gt;
&lt;li&gt;what evidence was found;&lt;/li&gt;
&lt;li&gt;why the rule passed or failed;&lt;/li&gt;
&lt;li&gt;and where the evidence came from.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the fundamental design principle behind AgentBadge:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Every meaningful score should be explainable through evidence.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The scanner should not ask an AI model:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How agent-ready does this API feel?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It should ask deterministic questions such as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Does this URL exist?"&lt;/p&gt;

&lt;p&gt;"Does it return the expected content type?"&lt;/p&gt;

&lt;p&gt;"Does the response contain an OpenAPI document?"&lt;/p&gt;

&lt;p&gt;"Does the declared authentication mechanism contain the required information?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The difference may look subtle, but architecturally it is enormous.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Rules are the measurement instrument
&lt;/h2&gt;

&lt;p&gt;A scanner is only as trustworthy as its rules.&lt;/p&gt;

&lt;p&gt;Instead of hiding the evaluation logic inside application code, AgentBadge treats rules as explicit, versioned measurement definitions.&lt;/p&gt;

&lt;p&gt;A simplified rule might look conceptually like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AB-001
Name: OpenAPI discoverability

Given:
  target = https://example.com

Check:
  GET /.well-known/openapi.json

Pass when:
  HTTP status = 200
  AND response is valid OpenAPI

Evidence:
  URL
  HTTP status
  content type
  content hash

Severity:
  medium
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important property is that another implementation should be able to understand the same rule.&lt;/p&gt;

&lt;p&gt;The rule is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The API looks well documented."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This specific machine-readable artifact was found and passed these specific checks."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That makes the scanner much easier to test, audit and reproduce.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Deterministic before intelligent
&lt;/h2&gt;

&lt;p&gt;This leads to one of the most important architectural principles of AgentBadge:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Deterministic before intelligent.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If something can be established deterministically, use deterministic logic.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Preferred method&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Does robots.txt exist?&lt;/td&gt;
&lt;td&gt;HTTP request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Does sitemap exist?&lt;/td&gt;
&lt;td&gt;HTTP request + parser&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Does OpenAPI exist?&lt;/td&gt;
&lt;td&gt;HTTP request + schema validation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Is JSON valid?&lt;/td&gt;
&lt;td&gt;JSON parser&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Does declared endpoint exist in another document?&lt;/td&gt;
&lt;td&gt;Exact matching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What does an undocumented endpoint mean?&lt;/td&gt;
&lt;td&gt;AI-assisted inference&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What does an API capability actually mean?&lt;/td&gt;
&lt;td&gt;Human confirmation / assisted review&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;AI has a role, but it should not become the judge of facts that can be verified directly.&lt;/p&gt;

&lt;p&gt;An LLM can help interpret ambiguous documentation.&lt;/p&gt;

&lt;p&gt;It should not silently decide that an API supports refunds simply because a paragraph mentions the word "refund."&lt;/p&gt;

&lt;p&gt;This is why AgentBadge treats AI as a &lt;strong&gt;copilot&lt;/strong&gt;, not as the authority responsible for the score.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Evidence is the missing layer
&lt;/h2&gt;

&lt;p&gt;A score without evidence is difficult to trust.&lt;/p&gt;

&lt;p&gt;Consider this finding:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Documentation: 18/25
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is almost nothing you can do with it.&lt;/p&gt;

&lt;p&gt;Now consider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AB-007  OpenAPI discoverability

STATUS: VERIFIED

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

OpenAPI version:
3.1.0

Confidence:
1.00
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the developer knows what happened.&lt;/p&gt;

&lt;p&gt;They can inspect the same resource themselves.&lt;/p&gt;

&lt;p&gt;This creates a chain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTP response → Evidence → Assertion → Rule result → Category score → Overall score
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The evidence is therefore not an optional explanation attached to the report.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evidence is part of the measurement itself.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Assertions connect evidence and scoring
&lt;/h2&gt;

&lt;p&gt;A useful internal abstraction is an &lt;strong&gt;assertion&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;An assertion answers one concrete question.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rule_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AB-007"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"VERIFIED"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://api.example.com/openapi.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"evidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"http_status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"content_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"application/json"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important states are intentionally explicit.&lt;/p&gt;

&lt;h3&gt;
  
  
  VERIFIED
&lt;/h3&gt;

&lt;p&gt;The scanner found direct evidence supporting the assertion.&lt;/p&gt;

&lt;h3&gt;
  
  
  INFERRED
&lt;/h3&gt;

&lt;p&gt;The scanner has a reasonable interpretation, but the evidence is not sufficient to treat it as fact.&lt;/p&gt;

&lt;h3&gt;
  
  
  CONFLICT
&lt;/h3&gt;

&lt;p&gt;Two sources disagree.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Guide says: POST /refund
OpenAPI says: POST /refund-request
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  MISSING
&lt;/h3&gt;

&lt;p&gt;The expected capability or artifact could not be found.&lt;/p&gt;

&lt;p&gt;These states are more informative than a simple pass/fail system.&lt;/p&gt;

&lt;p&gt;They tell us not only &lt;strong&gt;what the scanner thinks&lt;/strong&gt;, but also &lt;strong&gt;how strongly it knows it&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Confidence is not the same as verification
&lt;/h2&gt;

&lt;p&gt;This distinction is important.&lt;/p&gt;

&lt;p&gt;A scanner may infer something with high confidence.&lt;/p&gt;

&lt;p&gt;That does not automatically make it verified.&lt;/p&gt;

&lt;p&gt;For example, an API documentation page might strongly suggest that a service supports refunds.&lt;/p&gt;

&lt;p&gt;An LLM may assign a confidence of 0.94 to that interpretation.&lt;/p&gt;

&lt;p&gt;But unless there is machine-readable evidence supporting the capability, the assertion should not magically become VERIFIED.&lt;/p&gt;

&lt;p&gt;Instead: INFERRED, confidence: 0.94&lt;/p&gt;

&lt;p&gt;The user can then: Confirm, Edit, Reject&lt;/p&gt;

&lt;p&gt;This is the boundary between &lt;strong&gt;automatic fixes&lt;/strong&gt; and &lt;strong&gt;assisted fixes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Safe, deterministic changes can be automated.&lt;/p&gt;

&lt;p&gt;Semantic claims require human confirmation.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Reproducibility matters
&lt;/h2&gt;

&lt;p&gt;Now we arrive at the second major property of the scanner.&lt;/p&gt;

&lt;p&gt;Suppose you scan &lt;code&gt;https://api.example.com&lt;/code&gt; today and receive 76/100.&lt;/p&gt;

&lt;p&gt;Someone else runs the same rules against the same captured state and should be able to understand how the result was produced.&lt;/p&gt;

&lt;p&gt;That requires more than storing the final number.&lt;/p&gt;

&lt;p&gt;The report needs to describe the measurement context.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://api.example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ruleset"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"agent-readiness-v1.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scanner_version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.1.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"assertions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;76&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"categories"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"discovery"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"documentation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"authentication"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"machine_readability"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows the score to be understood as the output of a defined measurement process rather than a mysterious number.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb7uebfeiiqqyz0e2t974.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb7uebfeiiqqyz0e2t974.webp" alt="Reproducibility infographic" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Rules must be versioned
&lt;/h2&gt;

&lt;p&gt;Rules change. New standards appear. New machine-readable formats emerge.&lt;/p&gt;

&lt;p&gt;Some checks eventually turn out to be too strict or too weak.&lt;/p&gt;

&lt;p&gt;Therefore: Agent Readiness v1.0 must not silently become v1.1 while pretending the results are identical.&lt;/p&gt;

&lt;p&gt;Each ruleset should have an explicit version.&lt;/p&gt;

&lt;p&gt;Now a report can say: Score: 82/100, Ruleset: Agent Readiness v1.2&lt;/p&gt;

&lt;p&gt;This gives us an important property:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Same target + same measurement state + same ruleset = reproducible result.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  9. Why open rules do not destroy the product
&lt;/h2&gt;

&lt;p&gt;If AgentBadge publishes its rules, can't someone simply copy them?&lt;/p&gt;

&lt;p&gt;Yes. And that is intentional.&lt;/p&gt;

&lt;p&gt;The goal is not to create a secret scoring algorithm. The goal is to establish a useful measurement standard.&lt;/p&gt;

&lt;p&gt;The long-term value comes from the workflow around that standard: open specification, open scanner, GitHub Action, README badge, continuous monitoring, regression alerts, fix workflow, developer adoption.&lt;/p&gt;

&lt;p&gt;A competitor can copy AB-001, AB-002, AB-003.&lt;/p&gt;

&lt;p&gt;They cannot instantly copy: thousands of repositories displaying the badge, existing GitHub Actions, developer habits, historical scan data, integrations, workflow configuration, trust built around independently verifiable reports.&lt;/p&gt;

&lt;p&gt;The moat is not secret rules. It is a standard installed inside the developer workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. The score should explain itself
&lt;/h2&gt;

&lt;p&gt;A single number is useful for quick comparison. But it should never be the only information available.&lt;/p&gt;

&lt;p&gt;Suppose a developer's score changes: 76 to 72.&lt;/p&gt;

&lt;p&gt;The product should explain the delta: +8 OpenAPI documentation detected, -12 New authentication issue detected, +0 Discovery unchanged. Result: 76 to 72.&lt;/p&gt;

&lt;p&gt;This turns measurement into an improvement loop.&lt;/p&gt;




&lt;h2&gt;
  
  
  11. From Measure to Prove to Improve
&lt;/h2&gt;

&lt;p&gt;The architecture becomes a simple loop: Measure, Prove, Improve, Measure again.&lt;/p&gt;

&lt;p&gt;The score is the beginning of the workflow, not the end.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqgzp7g5lfqabtz9zoj1x.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqgzp7g5lfqabtz9zoj1x.webp" alt="Measure Prove Improve cycle diagram" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  12. What AgentBadge should never claim
&lt;/h2&gt;

&lt;p&gt;AgentBadge measures &lt;strong&gt;Agent Readiness&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It does not certify: API security, business correctness, service reliability, legal compliance, quality of business logic, whether an agent should trust the company.&lt;/p&gt;

&lt;p&gt;A high score does not mean "This API is safe." It means "This API satisfied these measurable Agent Readiness criteria."&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't certify. Measure.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  13. What this enables
&lt;/h2&gt;

&lt;p&gt;Once the measurement layer exists, many higher-level products become possible.&lt;/p&gt;

&lt;p&gt;A developer can run &lt;code&gt;npx @agentbadge/cli scan https://api.example.com&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A CI pipeline can enforce a minimum score. A README can display the current measurement. A platform can query AgentBadge programmatically. An organization can compare vendors using the same ruleset.&lt;/p&gt;




&lt;h2&gt;
  
  
  14. The bigger idea
&lt;/h2&gt;

&lt;p&gt;The web has spent years developing tools for measuring websites. Performance has metrics. Accessibility has automated checks. Security has scanners. TLS has analyzers. SEO has crawlers and validators.&lt;/p&gt;

&lt;p&gt;The emerging agentic web needs something similar.&lt;/p&gt;

&lt;p&gt;AgentBadge's approach is deliberately conservative: Define the rules. Collect the evidence. Show the reasoning. Version the rules. Make the result reproducible.&lt;/p&gt;

&lt;p&gt;That is what makes Agent Readiness a measurement discipline rather than another AI-generated checklist.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Read more:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/what-is-agent-readiness" rel="noopener noreferrer"&gt;What Is Agent Readiness?&lt;/a&gt; — Article 1&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/why-ai-agents-fail-to-use-apis" rel="noopener noreferrer"&gt;Why AI Agents Fail to Use APIs&lt;/a&gt; — Article 5&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/what-ai-agent-needs-to-understand-api" rel="noopener noreferrer"&gt;What Does an AI Agent Need to Understand an API?&lt;/a&gt; — Article 6&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/why-openapi-isnt-enough" rel="noopener noreferrer"&gt;Why Your OpenAPI Spec Isn't Enough&lt;/a&gt; — Article 7&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/how-do-you-measure-agent-readiness" rel="noopener noreferrer"&gt;How Do You Measure Agent Readiness?&lt;/a&gt; — Article 8&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Agent Knowledge Layer:&lt;/strong&gt; &lt;a href="https://agentbadge.xyz/agent-guide/" rel="noopener noreferrer"&gt;agentbadge.xyz/agent-guide&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>webdev</category>
      <category>testing</category>
    </item>
    <item>
      <title>Inside an Agent Readiness Scanner: Rules, Evidence and Reproducibility</title>
      <dc:creator>Paul Spread</dc:creator>
      <pubDate>Fri, 28 Aug 2026 06:26:46 +0000</pubDate>
      <link>https://dev.to/spread2009/inside-an-agent-readiness-scanner-rules-evidence-and-reproducibility-3j9k</link>
      <guid>https://dev.to/spread2009/inside-an-agent-readiness-scanner-rules-evidence-and-reproducibility-3j9k</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Originally published at &lt;a href="https://agentbadge.xyz/blog/inside-an-agent-readiness-scanner" rel="noopener noreferrer"&gt;AgentBadge&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When someone tells you that an API has an &lt;strong&gt;87/100 Agent Readiness score&lt;/strong&gt;, the first question should not be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Is 87 a good score?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The better question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Why is it 87?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And the question after that is even more important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Can I reproduce the result myself?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the problem AgentBadge is designed to solve.&lt;/p&gt;

&lt;p&gt;Agent Readiness should not be an opinion generated by an LLM. It should be a measurable property of a service, calculated from explicit rules and supported by evidence.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Rules → Evidence → Assertions → Score → Report&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  1. What the scanner actually does
&lt;/h2&gt;

&lt;p&gt;The scanner does not ask an LLM "is this API good?"&lt;/p&gt;

&lt;p&gt;It runs deterministic checks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does &lt;code&gt;robots.txt&lt;/code&gt; exist?&lt;/li&gt;
&lt;li&gt;Does &lt;code&gt;/.well-known/openapi.json&lt;/code&gt; return 200?&lt;/li&gt;
&lt;li&gt;Is the response valid OpenAPI?&lt;/li&gt;
&lt;li&gt;Does the homepage have machine-readable metadata?&lt;/li&gt;
&lt;li&gt;Is there an &lt;code&gt;agents.txt&lt;/code&gt; file?&lt;/li&gt;
&lt;li&gt;Are there &lt;code&gt;llms.txt&lt;/code&gt; or &lt;code&gt;llms-full.txt&lt;/code&gt; files?&lt;/li&gt;
&lt;li&gt;Does the API support content negotiation?&lt;/li&gt;
&lt;li&gt;Is there an A2A agent card?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each check produces evidence. Each piece of evidence becomes an assertion. Each assertion has a status.&lt;/p&gt;

&lt;p&gt;AI-assisted inference is used when deterministic checks are insufficient — but it is a copilot, not the judge.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Rule structure
&lt;/h2&gt;

&lt;p&gt;Every rule follows the same structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AB-001
Name: OpenAPI discoverability

Given:
  target = https://example.com

Check:
  GET /.well-known/openapi.json

Pass when:
  HTTP status = 200
  AND response is valid OpenAPI

Evidence:
  URL
  HTTP status
  content type
  content hash

Severity:
  medium
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not a prompt. It is a specification.&lt;/p&gt;

&lt;p&gt;The rule says what to check, what constitutes a pass, and what evidence to collect.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Assertion states
&lt;/h2&gt;

&lt;p&gt;Every assertion has exactly one of four states:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;State&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;VERIFIED&lt;/td&gt;
&lt;td&gt;Direct evidence found&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;INFERRED&lt;/td&gt;
&lt;td&gt;Reasonable interpretation, insufficient evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CONFLICT&lt;/td&gt;
&lt;td&gt;Two sources disagree&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MISSING&lt;/td&gt;
&lt;td&gt;Expected capability or artifact not found&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;An LLM can be 94% confident that an API supports refunds. Without machine-readable evidence, the assertion stays INFERRED.&lt;/p&gt;

&lt;p&gt;Confidence is not the same as verification.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ugm36e7rdmwjgc0hxyw.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ugm36e7rdmwjgc0hxyw.webp" alt="Assertion states infographic — four states from verified to missing" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Evidence is part of the measurement
&lt;/h2&gt;

&lt;p&gt;Evidence is not an optional explanation attached after the fact.&lt;/p&gt;

&lt;p&gt;Each finding includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The actual HTTP response (where applicable)&lt;/li&gt;
&lt;li&gt;The URL checked&lt;/li&gt;
&lt;li&gt;The content type received&lt;/li&gt;
&lt;li&gt;A content hash&lt;/li&gt;
&lt;li&gt;The timestamp of the check&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means the assertion is not just "OpenAPI exists: yes" — it is "OpenAPI exists: yes, here is the proof."&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rule_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AB-007"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"VERIFIED"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://api.example.com/openapi.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"evidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"http_status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"content_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"application/json"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Scoring has category floors
&lt;/h2&gt;

&lt;p&gt;The total score is not a simple average.&lt;/p&gt;

&lt;p&gt;Some categories are foundational. If &lt;code&gt;Discovery = 0&lt;/code&gt;, it does not matter how good the documentation is — agents cannot find the API.&lt;/p&gt;

&lt;p&gt;Category floors prevent a high score from hiding a critical zero.&lt;/p&gt;

&lt;p&gt;A score of 91/100 with &lt;code&gt;Discovery = 0&lt;/code&gt; is not a good score. It is a misleading one.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. What confidence means and what it does not
&lt;/h2&gt;

&lt;p&gt;An LLM can analyze an API documentation page and say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This API likely supports token-based authentication with rate limiting."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a reasonable inference. But without machine-readable evidence (an OpenAPI spec, a response header, a well-known endpoint), it remains INFERRED.&lt;/p&gt;

&lt;p&gt;The user can then:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Confirm&lt;/strong&gt; — "Yes, this is correct, I checked manually"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edit&lt;/strong&gt; — "Almost right, but the auth method is different"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reject&lt;/strong&gt; — "No, this is wrong"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a feedback loop: automatic fixes for deterministic changes, human confirmation for semantic claims.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Reproducibility
&lt;/h2&gt;

&lt;p&gt;If the scanner gives a score of 76/100 for &lt;code&gt;https://api.example.com&lt;/code&gt; today, someone else running the same rules against the same captured state should be able to understand how the result was produced.&lt;/p&gt;

&lt;p&gt;The report needs to describe the measurement context:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://api.example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ruleset"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"agent-readiness-v1.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scanner_version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.1.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"assertions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;76&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"categories"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"discovery"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"documentation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"authentication"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"machine_readability"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb7uebfeiiqqyz0e2t974.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb7uebfeiiqqyz0e2t974.webp" alt="Reproducibility infographic — three identical inputs converging into the same result" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Rules must be versioned
&lt;/h2&gt;

&lt;p&gt;Rules change. New standards appear. Some checks eventually turn out to be too strict or too weak.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Agent Readiness v1.0&lt;/code&gt; must not silently become &lt;code&gt;v1.1&lt;/code&gt; while pretending the results are identical.&lt;/p&gt;

&lt;p&gt;Each ruleset has an explicit version. A report can say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Score: 82/100&lt;br&gt;&lt;br&gt;
Ruleset: Agent Readiness v1.2&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Same target + same measurement state + same ruleset = reproducible result.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  9. Why open rules do not destroy the product
&lt;/h2&gt;

&lt;p&gt;If AgentBadge publishes its rules, can't someone simply copy them?&lt;/p&gt;

&lt;p&gt;Yes. And that is intentional.&lt;/p&gt;

&lt;p&gt;The goal is not a secret scoring algorithm. The goal is a useful measurement standard.&lt;/p&gt;

&lt;p&gt;The long-term value comes from the workflow around that standard:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Open specification → Open scanner → GitHub Action → README badge → Continuous monitoring → Regression alerts → Fix workflow → Developer adoption
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A competitor can copy rules. They cannot instantly copy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;thousands of repositories displaying the badge&lt;/li&gt;
&lt;li&gt;existing GitHub Actions&lt;/li&gt;
&lt;li&gt;developer habits&lt;/li&gt;
&lt;li&gt;historical scan data&lt;/li&gt;
&lt;li&gt;integrations&lt;/li&gt;
&lt;li&gt;trust built around independently verifiable reports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The moat is not "our rules are secret." It is "our standard is installed inside the developer workflow."&lt;/p&gt;




&lt;h2&gt;
  
  
  10. The score should explain itself
&lt;/h2&gt;

&lt;p&gt;If a developer's score changes from 76 → 72, the product should explain the delta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+8  OpenAPI documentation detected
-12  New authentication issue detected
+0   Discovery unchanged

Result: 76 → 72
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without a breakdown, a developer who fixed three problems and still sees the score decrease will think the product is broken.&lt;/p&gt;

&lt;p&gt;With a breakdown, it becomes: "The scanner found something new. Now I know what to fix."&lt;/p&gt;




&lt;h2&gt;
  
  
  11. From Measure to Prove to Improve
&lt;/h2&gt;

&lt;p&gt;The architecture is a loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MEASURE → PROVE → IMPROVE → Measure again
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The score is the beginning of the workflow, not the end.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqgzp7g5lfqabtz9zoj1x.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqgzp7g5lfqabtz9zoj1x.webp" alt="Measure → Prove → Improve cycle diagram" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  12. What AgentBadge should never claim
&lt;/h2&gt;

&lt;p&gt;AgentBadge measures &lt;strong&gt;Agent Readiness&lt;/strong&gt;. It does not certify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API security&lt;/li&gt;
&lt;li&gt;business correctness&lt;/li&gt;
&lt;li&gt;service reliability&lt;/li&gt;
&lt;li&gt;legal compliance&lt;/li&gt;
&lt;li&gt;whether an agent should trust the company&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A high score means: "This API satisfied these measurable Agent Readiness criteria."&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't certify. Measure.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  13. What this enables
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @agentbadge/cli scan https://api.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A CI pipeline can enforce a minimum score. A README can display the current measurement. A platform can query AgentBadge programmatically. An organization can compare vendors using the same ruleset.&lt;/p&gt;




&lt;h2&gt;
  
  
  14. The bigger idea
&lt;/h2&gt;

&lt;p&gt;Performance has metrics. Accessibility has automated checks. Security has scanners. TLS has analyzers. SEO has crawlers and validators.&lt;/p&gt;

&lt;p&gt;The emerging agentic web needs something similar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't ask an AI to invent a score.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Define the rules. Collect the evidence. Show the reasoning. Version the rules. Make the result reproducible.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then let developers improve their systems.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Read more:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/what-is-agent-readiness" rel="noopener noreferrer"&gt;What Is Agent Readiness?&lt;/a&gt; — Article 1&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/why-ai-agents-fail-to-use-apis" rel="noopener noreferrer"&gt;Why AI Agents Fail to Use APIs&lt;/a&gt; — Article 5&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/what-ai-agent-needs-to-understand-api" rel="noopener noreferrer"&gt;What Does an AI Agent Need to Understand an API?&lt;/a&gt; — Article 6&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/why-openapi-isnt-enough" rel="noopener noreferrer"&gt;Why Your OpenAPI Spec Isn't Enough&lt;/a&gt; — Article 7&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/how-do-you-measure-agent-readiness" rel="noopener noreferrer"&gt;How Do You Measure Agent Readiness?&lt;/a&gt; — Article 8&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Agent Knowledge Layer:&lt;/strong&gt; &lt;a href="https://agentbadge.xyz/agent-guide/" rel="noopener noreferrer"&gt;agentbadge.xyz/agent-guide&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>webdev</category>
      <category>testing</category>
    </item>
    <item>
      <title>How Do You Measure Agent Readiness?</title>
      <dc:creator>Paul Spread</dc:creator>
      <pubDate>Wed, 26 Aug 2026 13:11:26 +0000</pubDate>
      <link>https://dev.to/spread2009/how-do-you-measure-agent-readiness-3328</link>
      <guid>https://dev.to/spread2009/how-do-you-measure-agent-readiness-3328</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;If Agent Readiness is real, it should be measurable. And the measurement should be reproducible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You've read about &lt;a href="https://agentbadge.xyz/blog/what-is-agent-readiness" rel="noopener noreferrer"&gt;what Agent Readiness is&lt;/a&gt;. You've seen &lt;a href="https://agentbadge.xyz/blog/why-ai-agents-fail-to-use-apis" rel="noopener noreferrer"&gt;why AI agents fail to use APIs&lt;/a&gt; and &lt;a href="https://agentbadge.xyz/blog/what-ai-agent-needs-to-understand-api" rel="noopener noreferrer"&gt;what an agent needs to understand&lt;/a&gt;. You know &lt;a href="https://agentbadge.xyz/blog/why-openapi-isnt-enough" rel="noopener noreferrer"&gt;why OpenAPI alone isn't enough&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now the question shifts from "what" to "how":&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How do you objectively determine whether an API is ready for AI agents?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5qxzawufp8rpo3gfxkwf.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5qxzawufp8rpo3gfxkwf.webp" alt="Hero — Subjective labels on the left (" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;Labels like "AI-friendly API", "Agent-ready", and "Optimized for AI" are everywhere. They sound useful. They aren't.&lt;/p&gt;

&lt;p&gt;Two auditors can look at the same API and disagree on whether it's "agent-friendly." An LLM can score the same API differently on different runs. A marketing page can claim "AI-optimized" without any way to verify what that means.&lt;/p&gt;

&lt;p&gt;The problem isn't that these labels are wrong. The problem is that they're &lt;strong&gt;not reproducible&lt;/strong&gt;. If two people can look at the same API and reach different conclusions, the measurement isn't real — it's an opinion.&lt;/p&gt;

&lt;p&gt;If Agent Readiness is a real property of an API, it should be measurable. And the measurement should satisfy a simple requirement:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;same URL + same ruleset + same point in time = same result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the reproducibility requirement. It's what separates measurement from opinion.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Should We Measure?
&lt;/h2&gt;

&lt;p&gt;Agent Readiness isn't a single number. It's a set of properties across four categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Discovery&lt;/strong&gt; — Can an agent find the API?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt; — Can an agent understand the API?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication&lt;/strong&gt; — Can an agent authenticate autonomously?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Machine Readability&lt;/strong&gt; — Can an agent interact machine-to-machine?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But these aren't just checkboxes. Each category contains specific, testable assertions — properties that can be verified with HTTP requests:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The question isn't "does the API have OpenAPI?" The question is "can we verify that OpenAPI is discoverable?" — and that's a testable property.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F70kse1k11lektnegzrvo.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F70kse1k11lektnegzrvo.webp" alt="Deterministic pipeline: URL → Scanner → Evidence → Rules → Score, with AI copilot as optional dashed step at the end" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Deterministic Before Intelligent
&lt;/h2&gt;

&lt;p&gt;This is the central principle of the measurement framework.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTP response → Rule → Evidence → Result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, AI can help interpret complex cases. But the AI is a copilot, not the primary engine.&lt;/p&gt;

&lt;p&gt;The wrong approach:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;URL → LLM → "Looks agent-ready: 76/100"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The right approach:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;URL → Deterministic scanner → Evidence → Rules → Score → AI copilot (optional)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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't changed.&lt;/p&gt;

&lt;p&gt;This doesn'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.&lt;/p&gt;




&lt;h2&gt;
  
  
  Evidence, Not Opinions
&lt;/h2&gt;

&lt;p&gt;Every assertion in the measurement framework comes with evidence. Not "we think this is true" — but the actual HTTP response that proves it.&lt;/p&gt;

&lt;p&gt;Here's what an evidence card looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OPENAPI_DISCOVERABLE
Status: VERIFIED

Evidence:
  GET /openapi.json
  HTTP 200
  Content-Type: application/json
  Valid OpenAPI document
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsih8iqvvbdsiv1mqxucj.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsih8iqvvbdsiv1mqxucj.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" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the key difference between measuring and certifying. A certification says "this API is agent-ready." An evidence card says "here is the HTTP response that proves OpenAPI is discoverable."&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't tell developers what to believe. Show them what we measured.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When every assertion includes evidence, the conversation changes. Instead of debating whether an API is "ready," you can point to specific findings: 72 checks run, 58 passed, 14 failed — here's the evidence for each.&lt;/p&gt;




&lt;h2&gt;
  
  
  Assertions
&lt;/h2&gt;

&lt;p&gt;A scan result is not a magic score. It's a set of assertions — each one testable, each one with a status and evidence:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Assertion&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Evidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAPI discoverable&lt;/td&gt;
&lt;td&gt;VERIFIED&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/openapi.json → 200&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authentication documented&lt;/td&gt;
&lt;td&gt;VERIFIED&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;securitySchemes&lt;/code&gt; present in spec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Machine-readable errors&lt;/td&gt;
&lt;td&gt;MISSING&lt;/td&gt;
&lt;td&gt;HTML error response, not structured&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent guide&lt;/td&gt;
&lt;td&gt;MISSING&lt;/td&gt;
&lt;td&gt;&lt;code&gt;404 /agent-guide.json&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5wtc2g0ljfpsjwyw2ckv.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5wtc2g0ljfpsjwyw2ckv.webp" alt="Assertions table: four rows showing Assertion, Status, and Evidence columns — two VERIFIED in green, two MISSING in red" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;




&lt;h2&gt;
  
  
  VERIFIED / INFERRED / CONFLICT / MISSING
&lt;/h2&gt;

&lt;p&gt;Every assertion has one of four statuses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VERIFIED&lt;/strong&gt; — Direct proof exists. The scanner found the evidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MISSING&lt;/strong&gt; — Not found. The scanner looked and didn't find it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;INFERRED&lt;/strong&gt; — There are reasonable grounds to believe this is true, but the evidence is insufficient for verification.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CONFLICT&lt;/strong&gt; — Two sources contradict each other.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's a real example of CONFLICT:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OpenAPI spec says:    POST /refund
Agent Guide says:     POST /refund-request
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two sources, same API, different paths. The assertion status is CONFLICT — not VERIFIED, not MISSING. The scanner can't verify which is correct without making a live request, so it flags the contradiction.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F463eyr2knj54kf3a2txz.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F463eyr2knj54kf3a2txz.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" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The distinction between INFERRED and VERIFIED matters. INFERRED means "this looks right, but we can't prove it." VERIFIED means "here's the proof." An API that claims to have structured errors but returns &lt;code&gt;text/html&lt;/code&gt; on error responses isn't VERIFIED — it might be INFERRED or MISSING depending on what the scanner found.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Confidence is not the same thing as verification.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Scoring
&lt;/h2&gt;

&lt;p&gt;Only after assertions are established do we compute a score. The score is derived from the assertions — not the other way around.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Discovery           18/20
Documentation       19/25
Authentication      17/20
Machine Readability 15/20
Verification        10/15
─────────────────────────
Total               79/100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7pf21dqe4u71pew18i9n.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7pf21dqe4u71pew18i9n.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" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's a critical rule in the scoring model: &lt;strong&gt;category floor&lt;/strong&gt;. A high total score should not hide a critical zero in a fundamental category.&lt;/p&gt;

&lt;p&gt;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't find the API. A score of 91/100 with Discovery = 0 is misleading — it suggests the API is nearly ready when it's actually missing the most fundamental layer.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A high score should not hide a critical zero.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Score ≠ Certification
&lt;/h2&gt;

&lt;p&gt;AgentBadge doesn't say "this API is safe" or "this API is approved for agents."&lt;/p&gt;

&lt;p&gt;It says: &lt;strong&gt;"Here is what we measured, under this ruleset, at this point in time."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This distinction matters for three reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Trust&lt;/strong&gt; — Developers can verify the evidence themselves. They don't need to trust a badge; they can check the proof.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Legal risk&lt;/strong&gt; — Certification implies endorsement. Measurement implies observation. AgentBadge observes and reports; it doesn't endorse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reproducibility&lt;/strong&gt; — Anyone can run the same checks and get the same results. The measurement is transparent, not opaque.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't certify. Measure.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Reproducibility
&lt;/h2&gt;

&lt;p&gt;A measurement is only useful if it can be independently verified. The reproducibility formula is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;URL + timestamp + ruleset version + scan artifact + report hash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent Readiness v1.0
Scan: 2026-08-26T14:03:22Z
Ruleset: agentbadge-ruleset@1.0.0
Report hash: a3f7b2c1...
Score: 79/100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;This is what makes the measurement real. It's not a subjective assessment that changes with the auditor. It's a deterministic process that produces the same output for the same input.&lt;/p&gt;




&lt;h2&gt;
  
  
  Static Measurement vs Real Agent Behavior
&lt;/h2&gt;

&lt;p&gt;An honest caveat: &lt;strong&gt;static readiness does not prove that every AI agent will successfully use an API.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AgentBadge measures whether an API &lt;em&gt;can be&lt;/em&gt; discovered, understood, and potentially used by an agent — based on observable evidence. It doesn't measure whether every agent &lt;em&gt;will&lt;/em&gt; successfully complete every task.&lt;/p&gt;

&lt;p&gt;These are different questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Static measurement&lt;/strong&gt;: "Does the API expose the properties that an agent needs?" (Phase 1)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Active verification&lt;/strong&gt;: "Can an agent actually perform specific operations?" (Phase 2)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Behavioral verification&lt;/strong&gt;: "What does the agent do when it encounters this API in production?" (Future)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The measurement framework starts with Phase 1 — static measurement. It's the foundation. But it's not the end of the road.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Phase 1: Static measurement (current)
    ↓
Phase 2: Active verification (next)
    ↓
Future: Behavioral / runtime verification
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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.&lt;/p&gt;




&lt;h2&gt;
  
  
  What to Do with Results
&lt;/h2&gt;

&lt;p&gt;Measurement without action is just data. The cycle is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Measure → Evidence → Fix
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's what a typical result looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Score: 76/100

Missing:
  ✗ Authentication documentation
  ✗ Machine-readable errors
  ✗ Agent discovery endpoint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The question every API team asks: &lt;strong&gt;"What can I do about it?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The answer is in the evidence. Each MISSING assertion points to a specific, fixable gap:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Authentication documentation missing&lt;/strong&gt; → Add &lt;code&gt;securitySchemes&lt;/code&gt; to your OpenAPI spec with flow details&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Machine-readable errors missing&lt;/strong&gt; → Return &lt;code&gt;application/problem+json&lt;/code&gt; (RFC 9457) instead of HTML error pages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent discovery endpoint missing&lt;/strong&gt; → Add &lt;code&gt;/.well-known/openapi&lt;/code&gt; or &lt;code&gt;/agent-guide.json&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fix the gaps. Re-scan. Verify the improvements with measurable evidence.&lt;/p&gt;

&lt;p&gt;This is where measurement becomes actionable — and where it bridges to Article 12: "From Scan to Fix" (upcoming).&lt;/p&gt;




&lt;h2&gt;
  
  
  For AI Agents
&lt;/h2&gt;

&lt;p&gt;If you'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.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Related Articles
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/what-is-agent-readiness" rel="noopener noreferrer"&gt;What Is Agent Readiness?&lt;/a&gt; — Article 1: the foundational concept&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/why-ai-agents-fail-to-use-apis" rel="noopener noreferrer"&gt;Why AI Agents Fail to Use APIs&lt;/a&gt; — Article 5: 7 failure modes that measurement addresses&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/what-ai-agent-needs-to-understand-api" rel="noopener noreferrer"&gt;What Does an AI Agent Need to Understand an API?&lt;/a&gt; — Article 6: 8 context layers that measurement checks&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/why-openapi-isnt-enough" rel="noopener noreferrer"&gt;Why Your OpenAPI Spec Isn't Enough for AI Agents&lt;/a&gt; — Article 7: the structural gap that measurement fills&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Inside an Agent Readiness Scanner&lt;/em&gt; — Article 9 (upcoming): the engineering architecture behind the measurement engine&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Don't certify. Measure.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Originally published at &lt;a href="https://agentbadge.xyz/blog/how-do-you-measure-agent-readiness" rel="noopener noreferrer"&gt;AgentBadge&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>agents</category>
      <category>testing</category>
    </item>
    <item>
      <title>Why Your OpenAPI Spec Isn't Enough for AI Agents</title>
      <dc:creator>Paul Spread</dc:creator>
      <pubDate>Tue, 25 Aug 2026 11:18:43 +0000</pubDate>
      <link>https://dev.to/spread2009/why-your-openapi-spec-isnt-enough-for-ai-agents-3cpe</link>
      <guid>https://dev.to/spread2009/why-your-openapi-spec-isnt-enough-for-ai-agents-3cpe</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;OpenAPI describes an API. Agent Readiness describes whether an agent can actually use it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;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's experience.&lt;/p&gt;

&lt;p&gt;This isn't about OpenAPI being bad. OpenAPI is a necessary foundation. But it's not a complete Agent Readiness layer.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Provocation
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"Our API has OpenAPI. Why does an AI agent still fail to use it?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;The answer isn't that OpenAPI is insufficient as a specification. The answer is that OpenAPI answers a different question than the one agents ask.&lt;/p&gt;

&lt;p&gt;OpenAPI answers: &lt;strong&gt;"What endpoints exist?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agents ask: &lt;strong&gt;"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?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These are different questions. And the gap between them is structural.&lt;/p&gt;




&lt;h2&gt;
  
  
  One Real Example: A Payments API
&lt;/h2&gt;

&lt;p&gt;Consider a payments API with three endpoints:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST /payments              — create a payment
GET  /payments/{id}         — retrieve payment status
POST /payments/{id}/refund  — refund a payment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;But an AI agent needs to answer questions that the spec doesn't address:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Can I create a payment?
When should I call it?
What must happen first?
What does "pending" mean?
When can I refund?
What happens if payment fails?
Should I retry?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each of these questions maps to a layer beyond OpenAPI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"Can I create a payment?"&lt;/strong&gt; — Discovery: Is there a &lt;code&gt;llms.txt&lt;/code&gt; or &lt;code&gt;.well-known/openapi&lt;/code&gt; so the agent can find the API?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"When should I call it?"&lt;/strong&gt; — Semantics: Is &lt;code&gt;POST /payments&lt;/code&gt; idempotent? Does it charge money? Is it safe to retry?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"What must happen first?"&lt;/strong&gt; — Capabilities: What prerequisites exist? Does the agent need a customer ID first?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"What does 'pending' mean?"&lt;/strong&gt; — Semantics: What are the possible states and transitions?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"When can I refund?"&lt;/strong&gt; — Semantics + Safety: Is refund conditional on payment state? Is it reversible?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"What happens if payment fails?"&lt;/strong&gt; — Errors: Does the API return structured errors with recovery hints?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Should I retry?"&lt;/strong&gt; — Safety: Is retry safe, or will it create duplicate payments?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OpenAPI describes the interface. These questions require context that goes beyond the interface.&lt;/p&gt;

&lt;p&gt;Consider what happens when an agent actually tries to use this payments API. The agent reads the OpenAPI spec, identifies &lt;code&gt;POST /payments&lt;/code&gt;, constructs a request, and sends it. So far, so good. But then:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The response says &lt;code&gt;"status": "pending"&lt;/code&gt;. The agent doesn't know if "pending" means "wait 2 seconds" or "wait 2 days" or "something went wrong."&lt;/li&gt;
&lt;li&gt;The agent tries to refund a payment. The API returns &lt;code&gt;400 Bad Request&lt;/code&gt; with &lt;code&gt;{"error": "invalid_state"}&lt;/code&gt;. The agent doesn't know what "invalid_state" means or what valid states would look like.&lt;/li&gt;
&lt;li&gt;The agent retries &lt;code&gt;POST /payments&lt;/code&gt; after a timeout. A second payment is created. The agent didn't know the operation wasn't idempotent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these failures are caused by a wrong OpenAPI spec. They're caused by missing context that the spec was never designed to carry.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Structural Gap
&lt;/h2&gt;

&lt;p&gt;The gap is not about model intelligence. A more capable model still can't answer "Is this operation idempotent?" if the information isn't in the spec. The gap is structural: &lt;strong&gt;API description ≠ agent understanding.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is not a call for a new magic file. Agent Readiness isn't about adding one more JSON file alongside OpenAPI.&lt;/p&gt;

&lt;p&gt;It's about cumulative layers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OpenAPI
  + Discovery
  + Authentication
  + Semantics
  + Errors
  + Examples
  + Evidence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each layer builds on the previous. Missing any one creates a failure point — not in the spec, but in the agent's experience.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OpenAPI&lt;/strong&gt; provides endpoint definitions, schema types, auth schemes, response codes. Necessary. But not sufficient.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discovery&lt;/strong&gt; makes the API findable by autonomous agents (&lt;code&gt;llms.txt&lt;/code&gt;, &lt;code&gt;.well-known&lt;/code&gt;, &lt;code&gt;ai-sitemap.xml&lt;/code&gt;). Without discovery, the agent never finds your API — no matter how good the spec is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication&lt;/strong&gt; provides machine-readable auth metadata (RFC 8414, &lt;code&gt;securitySchemes&lt;/code&gt; with flow details). Without it, the agent can't obtain credentials autonomously.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantics&lt;/strong&gt; tells the agent what an operation means (side-effects, idempotency, safety classification). Without semantics, the agent doesn't know if &lt;code&gt;POST /payments&lt;/code&gt; charges money or just creates a record.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Errors&lt;/strong&gt; provides structured error responses with recovery hints (RFC 9457 Problem Details). Without structured errors, the agent can't recover — it just fails.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Examples&lt;/strong&gt; gives concrete request/response pairs for every operation. Without examples, the agent guesses at request shapes and gets 400s.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence&lt;/strong&gt; provides machine-readable proof that claims about the API are verifiable. Without evidence, every claim is just marketing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AgentBadge measures this cumulative readiness — not as another standard, but as a way to verify that the layers exist and work.&lt;/p&gt;




&lt;h2&gt;
  
  
  Evidence: Don't Declare, Show
&lt;/h2&gt;

&lt;p&gt;A claim without evidence is a marketing statement. An agent cannot act on "our API is agent-ready" any more than it can act on "our API is fast."&lt;/p&gt;

&lt;p&gt;The Claim + Evidence pattern transforms assertions into verifiable facts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Claim&lt;/th&gt;
&lt;th&gt;Evidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;"API is discoverable"&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;GET /llms.txt&lt;/code&gt; returns 200 with valid content&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Auth is machine-readable"&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;GET /.well-known/oauth-authorization-server&lt;/code&gt; returns RFC 8414 metadata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Errors follow RFC 9457"&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;GET /payments/invalid&lt;/code&gt; returns &lt;code&gt;application/problem+json&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Refunds are idempotent"&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;x-agent-semantics: idempotent: true&lt;/code&gt; in OpenAPI + test endpoint verifies&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is the key concept that bridges to the measurement framework. Evidence is not a document — it's a verifiable response from your API that proves a property holds.&lt;/p&gt;

&lt;p&gt;When AgentBadge scans your API, every finding includes evidence: the actual HTTP response, header, or body that produced the check result. Not "we think your API supports discovery" — but &lt;code&gt;GET /llms.txt → 200, content-type: text/plain, 847 bytes, valid format&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This changes the conversation. Instead of debating whether an API is "agent-ready" in the abstract, you can point to specific, verifiable responses. Instead of a badge that says "ready," you get a report that says "72 checks run, 58 passed, 14 failed — here's the evidence for each."&lt;/p&gt;

&lt;p&gt;Evidence also means reproducibility. Another agent, another scanner, another developer can run the same checks and get the same results. The claim isn't "trust us" — it's "verify yourself."&lt;/p&gt;




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

&lt;p&gt;If OpenAPI is necessary but not sufficient, and if Agent Readiness is cumulative layers with evidence — then the next question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How do we objectively determine what an agent can actually discover, understand, and use?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's the measurement problem. And it's what &lt;a href="https://agentbadge.xyz/blog/measure-dont-certify" rel="noopener noreferrer"&gt;Article 8 — "Measuring Agent Readiness: A Practical Framework for AI-Ready APIs"&lt;/a&gt; addresses.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You Can Do Now
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check your discovery layer&lt;/strong&gt; — Does &lt;code&gt;GET /llms.txt&lt;/code&gt; return 200? Does &lt;code&gt;/.well-known/openapi&lt;/code&gt; exist?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit your semantics&lt;/strong&gt; — Do your OpenAPI operations have &lt;code&gt;summary&lt;/code&gt; and &lt;code&gt;description&lt;/code&gt; fields that explain intent, not just method?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review your error responses&lt;/strong&gt; — Are errors structured (RFC 9457) with recovery hints, or just &lt;code&gt;{"error": "something"}&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add examples&lt;/strong&gt; — Does every operation have at least one concrete request/response example?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run a scan&lt;/strong&gt; — &lt;code&gt;npx @agentbadge/cli scan https://your-api.com&lt;/code&gt; — 72 checks in seconds, free, no signup.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @agentbadge/cli scan https://api.example.com

&lt;span class="c"&gt;# JSON report with evidence&lt;/span&gt;
npx @agentbadge/cli scan https://api.example.com &lt;span class="nt"&gt;--format&lt;/span&gt; json &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; report.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every finding links to the HTTP response that produced it. Evidence, not assertions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Related Articles
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/what-is-agent-readiness" rel="noopener noreferrer"&gt;What Is Agent Readiness?&lt;/a&gt; — Article 1: the foundational concept&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/why-ai-agents-fail-to-use-apis" rel="noopener noreferrer"&gt;Why AI Agents Fail to Use APIs&lt;/a&gt; — Article 5: 7 failure modes&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/what-ai-agent-needs-to-understand-api" rel="noopener noreferrer"&gt;What Does an AI Agent Need to Understand an API?&lt;/a&gt; — Article 6: 8 context layers&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;OpenAPI describes an API. Agent Readiness describes whether an agent can actually use it.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Originally published at &lt;a href="https://agentbadge.xyz/blog/why-openapi-isnt-enough" rel="noopener noreferrer"&gt;AgentBadge&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>openapi</category>
      <category>agents</category>
    </item>
    <item>
      <title>What Does an AI Agent Actually Need to Understand an API?</title>
      <dc:creator>Paul Spread</dc:creator>
      <pubDate>Thu, 20 Aug 2026 19:16:54 +0000</pubDate>
      <link>https://dev.to/spread2009/what-does-an-ai-agent-actually-need-to-understand-an-api-mnc</link>
      <guid>https://dev.to/spread2009/what-does-an-ai-agent-actually-need-to-understand-an-api-mnc</guid>
      <description>&lt;p&gt;An API can be perfectly documented for humans and still be nearly impossible for an AI agent to use.&lt;/p&gt;

&lt;p&gt;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 "documented for humans" and "understandable by agents" is not about model intelligence. It's about missing context layers.&lt;/p&gt;

&lt;p&gt;This article identifies the 8 context layers that determine whether an autonomous agent can discover, understand, and successfully use your API.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Agent Context Flow
&lt;/h2&gt;

&lt;p&gt;When an agent receives a task — "find a payment API and process a refund" — it runs through a decision chain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent
  ↓
"Where is the API?"          → Discovery
  ↓
"What can I do here?"        → Capabilities
  ↓
"What do I need to provide?" → Inputs
  ↓
"Do I have permission?"      → Authentication
  ↓
"What does this mean?"       → Semantics
  ↓
"What will I get back?"      → Output
  ↓
"What if something breaks?"  → Errors
  ↓
"Is it safe to do this?"     → Safety
  ↓
SUCCESS / FAILURE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwcpc8gmrkfke1pj9j22y.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwcpc8gmrkfke1pj9j22y.webp" alt="Hero — Agent context flow: 8 layers from Discovery to Safety" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Discovery — "What is this API?"
&lt;/h2&gt;

&lt;p&gt;An agent cannot use an API it cannot find. Machine-readable discovery is the first layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad:&lt;/strong&gt; No &lt;code&gt;llms.txt&lt;/code&gt;, no &lt;code&gt;.well-known&lt;/code&gt; endpoints, no &lt;code&gt;ai-sitemap.xml&lt;/code&gt;. The API is invisible to autonomous discovery. A human might Google it. An agent operating in a pipeline cannot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Better:&lt;/strong&gt; &lt;code&gt;llms.txt&lt;/code&gt; at root with API summary. &lt;code&gt;/.well-known/openapi&lt;/code&gt; or &lt;code&gt;/.well-known/service-desc&lt;/code&gt; for spec discovery. &lt;code&gt;ai-sitemap.xml&lt;/code&gt; listing API endpoints. &lt;code&gt;link rel="service"&lt;/code&gt; from the homepage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why agents care:&lt;/strong&gt; Without discovery, the agent stops at step one. It doesn't matter how good your OpenAPI is if the agent can't find it. Discovery is the prerequisite for all subsequent layers.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Capabilities — "What can I do here?"
&lt;/h2&gt;

&lt;p&gt;Agents plan actions at the intent level, not the HTTP method level. &lt;code&gt;POST /orders&lt;/code&gt; — is that creating, updating, or processing?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad:&lt;/strong&gt; Bare endpoint listing. Agent sees HTTP methods but doesn't understand intent. It can call the endpoint but doesn't know what it accomplishes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Better:&lt;/strong&gt; Capability descriptions mapped to endpoints: "search products", "create orders", "check order status", "cancel an order". Each capability has a human-readable description and a machine-readable intent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why agents care:&lt;/strong&gt; Agents decompose tasks into sub-goals. "Process a refund" becomes: find order → check status → issue refund. Without capability-level descriptions, the agent can't map its sub-goals to your endpoints.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Inputs — "What do I need to provide?"
&lt;/h2&gt;

&lt;p&gt;Agents cannot read between the lines. Empty &lt;code&gt;description: ""&lt;/code&gt; means the agent doesn't know what to send.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;customer_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Better:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;customer_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;uuid&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;UUID&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;of&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;an&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;existing&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;customer,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;obtained&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;from&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;GET&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;/customers"&lt;/span&gt;
  &lt;span class="na"&gt;example&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;550e8400-e29b-41d4-a716-446655440000"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why agents care:&lt;/strong&gt; 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.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Authentication — "Do I have permission?"
&lt;/h2&gt;

&lt;p&gt;Authentication is one of the top failure causes for agents. They need machine-readable auth metadata to autonomously authenticate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad:&lt;/strong&gt; Human OAuth docs with browser redirect flows. The agent cannot execute browser steps. It gets a 401 and stops.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Better:&lt;/strong&gt; &lt;code&gt;securitySchemes&lt;/code&gt; in OpenAPI with full flow descriptions. &lt;code&gt;/.well-known/oauth-authorization-server&lt;/code&gt; (RFC 8414) for machine-readable discovery of token endpoints, scopes, and grant types.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why agents care:&lt;/strong&gt; If the agent can't authenticate autonomously, it can't use the API at all. Browser-based OAuth flows are designed for humans clicking "Authorize". Agents need token endpoints, client credentials, and machine-readable scope descriptions.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Semantics — "What does this operation actually mean?"
&lt;/h2&gt;

&lt;p&gt;This is critical for autonomous agents: is the operation safe? Can it be retried? Are there side effects? Does it charge money?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;POST /api/v2/process&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Process"&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Better:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;POST /api/v2/process&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;x-agent-semantics&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;operation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;create&lt;/span&gt;
    &lt;span class="na"&gt;side-effects&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;idempotent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
    &lt;span class="na"&gt;charges-money&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;safe-to-retry&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why agents care:&lt;/strong&gt; Without semantic metadata, &lt;code&gt;DELETE /account&lt;/code&gt; and &lt;code&gt;GET /account&lt;/code&gt; 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?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0b0abt5gxz3k0xjnoogs.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0b0abt5gxz3k0xjnoogs.webp" alt="Evolution: Human-readable → Machine-readable → Agent-readable" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Output — "What will I get?"
&lt;/h2&gt;

&lt;p&gt;Agents need action chains. Not just "what came back" but "what to do next."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;responses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;200'&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;OK"&lt;/span&gt;
    &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;object&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Better:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;responses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;200'&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Order&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;created&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;successfully"&lt;/span&gt;
    &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;object&lt;/span&gt;
      &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
          &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;uuid&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Order&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ID&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tracking"&lt;/span&gt;
        &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
          &lt;span class="na"&gt;enum&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;pending&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;confirmed&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;shipped&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
        &lt;span class="na"&gt;next_actions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;array&lt;/span&gt;
          &lt;span class="na"&gt;items&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;object&lt;/span&gt;
            &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
                &lt;span class="na"&gt;enum&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;confirm&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;cancel&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;track&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
              &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why agents care:&lt;/strong&gt; Without structured output, the agent receives a blob of JSON and doesn't know which fields to use for the next step. &lt;code&gt;next_actions&lt;/code&gt; tells the agent what it can do after this response — enabling autonomous multi-step workflows.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Errors — "What if something goes wrong?"
&lt;/h2&gt;

&lt;p&gt;Good agent APIs describe not only how to succeed but how to recover. Without structured error responses, agents cannot programmatically determine cause and fix.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Bad&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Request&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"invalid_request"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Better:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://agentbadge.xyz/errors/invalid-format"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Invalid customer_id format"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"errors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"field"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"customer_id"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"invalid_format"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Expected UUID format"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"recovery_hint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Obtain a valid customer_id from GET /customers"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why agents care:&lt;/strong&gt; Without structured errors, the agent sees "400 Bad Request" and stops. It doesn't know which field was wrong or how to fix it. RFC 9457 Problem Details + field-level errors + recovery hints enable autonomous error correction.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuird272tleuy7psjixxt.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuird272tleuy7psjixxt.webp" alt="Error recovery flow: 401 → refresh, 403 → request permission, 404 → missing, 429 → retry, 500 → backoff" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Safety — "Is it safe to do this?"
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;DELETE /account&lt;/code&gt; and &lt;code&gt;GET /account&lt;/code&gt; are both HTTP requests to an agent without safety classification. But the risk is entirely different.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad:&lt;/strong&gt; No safety classification. Agent treats all operations the same. It might retry a destructive operation because it got a timeout.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Better:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;x-agent-safety&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;risk-level&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;financial&lt;/span&gt;
  &lt;span class="na"&gt;reversible&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
  &lt;span class="na"&gt;requires-confirmation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;warning&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;This&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;permanently&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;deletes&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;account"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Safety levels: &lt;code&gt;read-only&lt;/code&gt; → &lt;code&gt;write&lt;/code&gt; → &lt;code&gt;destructive&lt;/code&gt; → &lt;code&gt;financial&lt;/code&gt; → &lt;code&gt;irreversible&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why agents care:&lt;/strong&gt; Agents retry on timeouts. If a &lt;code&gt;DELETE&lt;/code&gt; operation is retried, data is lost. Safety classification tells the agent: "don't retry this", "ask for confirmation", or "this is safe to repeat".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw0gt3tj853fkyndgcix4.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw0gt3tj853fkyndgcix4.webp" alt="Safety classification: 5 risk levels from read-only to irreversible" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Version A vs Version B
&lt;/h2&gt;

&lt;p&gt;Consider two APIs with identical OpenAPI structure:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Version A — OpenAPI only:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Paths and methods: ✅&lt;/li&gt;
&lt;li&gt;Schemas: ✅ (but empty descriptions)&lt;/li&gt;
&lt;li&gt;Security schemes: ✅ (but no .well-known)&lt;/li&gt;
&lt;li&gt;No semantic metadata&lt;/li&gt;
&lt;li&gt;No error recovery hints&lt;/li&gt;
&lt;li&gt;No safety classification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Version B — OpenAPI + Agent Context:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Paths and methods: ✅&lt;/li&gt;
&lt;li&gt;Schemas with full descriptions, examples, constraints: ✅&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/.well-known/oauth-authorization-server&lt;/code&gt;: ✅&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;x-agent-semantics&lt;/code&gt; on every operation: ✅&lt;/li&gt;
&lt;li&gt;RFC 9457 Problem Details with recovery hints: ✅&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;x-agent-safety&lt;/code&gt; classification: ✅&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;llms.txt&lt;/code&gt; with API summary: ✅&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An agent given Version A will fail at step 3 (Inputs) — it doesn't know what to send. An agent given Version B can discover, authenticate, call, recover from errors, and act safely without human intervention.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F10uzf3yjmptg43dczmu4.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F10uzf3yjmptg43dczmu4.webp" alt="Version A vs Version B: sparse spec vs rich agent context" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The difference is not the model. The difference is the context.&lt;/p&gt;




&lt;h2&gt;
  
  
  This Is Agent Readiness
&lt;/h2&gt;

&lt;p&gt;These 8 context layers are not a wish list. They are measurable properties. &lt;a href="https://agentbadge.xyz/blog/what-is-agent-readiness" rel="noopener noreferrer"&gt;Agent Readiness&lt;/a&gt; is the framework that measures whether an API provides sufficient context for autonomous use.&lt;/p&gt;

&lt;p&gt;Agent Readiness checks each layer with deterministic, evidence-based rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Discovery:&lt;/strong&gt; Does &lt;code&gt;llms.txt&lt;/code&gt; exist? Does &lt;code&gt;/.well-known/openapi&lt;/code&gt; resolve?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Capabilities:&lt;/strong&gt; Are operation descriptions non-empty and intent-level?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inputs:&lt;/strong&gt; Do schema properties have descriptions, examples, and constraints?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication:&lt;/strong&gt; Is &lt;code&gt;securitySchemes&lt;/code&gt; populated? Does &lt;code&gt;.well-known/oauth-authorization-server&lt;/code&gt; exist?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantics:&lt;/strong&gt; Are &lt;code&gt;x-agent-semantics&lt;/code&gt; or equivalent extensions present?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output:&lt;/strong&gt; Do responses include full schemas with &lt;code&gt;next_actions&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Errors:&lt;/strong&gt; Are error responses structured (RFC 9457) with recovery hints?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety:&lt;/strong&gt; Is &lt;code&gt;x-agent-safety&lt;/code&gt; or equivalent classification present?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;72 checks in seconds. Free, no signup.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @agentbadge/cli scan https://api.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffc18t2docrazhm2evn24.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffc18t2docrazhm2evn24.webp" alt="Agent context layers stack: 8 building blocks from Discovery to Safety" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;This article defined the 8 context layers. The next question is: &lt;strong&gt;can we measure them?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the next article — "Can We Measure Agent Readiness?" — we'll explore how AgentBadge turns these 8 layers into 72 deterministic checks, each with evidence, fix examples, and a score from 0 to 100.&lt;/p&gt;




&lt;h2&gt;
  
  
  Related Articles
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/what-is-agent-readiness" rel="noopener noreferrer"&gt;What Is Agent Readiness?&lt;/a&gt; — Article 1: the foundational concept&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/api-has-seo-agent-readiness" rel="noopener noreferrer"&gt;API Has SEO Agent Readiness&lt;/a&gt; — Article 2: SEO vs agent discovery&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/web-becoming-agentic-api-discovery" rel="noopener noreferrer"&gt;The Web Is Becoming Agentic&lt;/a&gt; — Article 3: agentic web and API discovery&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/from-seo-to-geo-to-agent-readiness" rel="noopener noreferrer"&gt;From SEO to GEO to Agent Readiness&lt;/a&gt; — Article 4: evolution of optimization&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/why-ai-agents-fail-to-use-apis" rel="noopener noreferrer"&gt;Why AI Agents Fail to Use APIs&lt;/a&gt; — Article 5: 7 failure modes these 8 layers solve&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Don't certify. Measure.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Originally published at &lt;a href="https://agentbadge.xyz/blog/what-ai-agent-needs-to-understand-api" rel="noopener noreferrer"&gt;AgentBadge&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>agents</category>
      <category>openapi</category>
    </item>
    <item>
      <title>Why AI Agents Fail to Use APIs: 7 Failure Modes Every API Developer Should Know</title>
      <dc:creator>Paul Spread</dc:creator>
      <pubDate>Thu, 20 Aug 2026 09:59:09 +0000</pubDate>
      <link>https://dev.to/spread2009/why-ai-agents-fail-to-use-apis-7-failure-modes-every-api-developer-should-know-4ceo</link>
      <guid>https://dev.to/spread2009/why-ai-agents-fail-to-use-apis-7-failure-modes-every-api-developer-should-know-4ceo</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3r6xo17zk3odk1kjspfe.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3r6xo17zk3odk1kjspfe.webp" alt="Cover" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For AI agents:&lt;/strong&gt; Explore the &lt;a href="https://agentbadge.xyz/agent-guide/articles/why-ai-agents-fail-apis" rel="noopener noreferrer"&gt;Agent Knowledge Layer&lt;/a&gt; for machine-readable context about why APIs fail for autonomous use and how to measure agent readiness.&lt;/p&gt;




&lt;h2&gt;
  
  
  Your API doesn't have an AI problem. It has an interface problem.
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;AI agents usually don't fail because the model is stupid.&lt;br&gt;
They fail because the API was designed for humans, not autonomous software.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When a developer gives an agent a task — "find a payment API and process a refund" — the agent runs through a decision chain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent
  ↓
"I need to find an API"     → Can I discover it?
  ↓
"I found it"                → Can I understand it?
  ↓
"I understand it"           → Can I authenticate?
  ↓
"I'm authenticated"         → Do I know what this endpoint actually does?
  ↓
"I know what it does"       → Can I recover from errors?
  ↓
"I can recover"             → Can I safely perform the action?
  ↓
SUCCESS / FAILURE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3r6xo17zk3odk1kjspfe.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3r6xo17zk3odk1kjspfe.webp" alt="Hero — Agent failure workflow: 7 gates pipeline" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Human vs Agent
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Human developer:

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

Agent:

"Where is the API?"
"What does this endpoint do?"
"What does this parameter mean?"
"Can I call it?"
"What happens if it fails?"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A human reads documentation and fills in the gaps with context. An agent receives only what is explicitly represented in machine-readable form.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3y4l577r3wzrixrm53z4.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3y4l577r3wzrixrm53z4.webp" alt="Human vs Agent — human fills gaps with context, agent can't" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here are the 7 specific ways agents fail — and how to measure each one.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Discovery failure
&lt;/h2&gt;

&lt;p&gt;The agent can't find the API. No &lt;code&gt;llms.txt&lt;/code&gt;, no &lt;code&gt;/.well-known/&lt;/code&gt;, no &lt;code&gt;ai-sitemap.xml&lt;/code&gt;, no link from the homepage.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Human: "Let me Google 'Stripe API'"
→ finds stripe.com/docs/api
→ reads documentation
→ starts coding

Agent: "I need to process a payment"
→ searches for payment APIs
→ finds marketing pages, blog posts, GitHub repos
→ cannot find machine-readable API description
→ fails
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What the agent sees:&lt;/strong&gt; HTML pages with marketing content. No &lt;code&gt;link rel="service"&lt;/code&gt;, no OpenAPI URL, no &lt;code&gt;llms.txt&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the human developer assumes:&lt;/strong&gt; "Our API is documented at &lt;code&gt;docs.example.com&lt;/code&gt;. Everyone knows that."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to fix it:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;llms.txt&lt;/code&gt; at root with API description links&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/.well-known/openapi&lt;/code&gt; or &lt;code&gt;/.well-known/service-desc&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ai-sitemap.xml&lt;/code&gt; with API endpoints&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;link rel="service"&lt;/code&gt; from homepage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to measure it:&lt;/strong&gt; AgentBadge Discovery checks — can an agent discover your API within 2 hops from the root?&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Documentation failure
&lt;/h2&gt;

&lt;p&gt;The API documentation exists, but it's written for humans. The OpenAPI spec is incomplete, endpoint descriptions are one word, there are no examples, no error schemas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# OpenAPI spec — technically valid&lt;/span&gt;
&lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="s"&gt;/users/{id}&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Get&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;user"&lt;/span&gt;      &lt;span class="c1"&gt;# ← what does this mean for an agent?&lt;/span&gt;
      &lt;span class="na"&gt;parameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;id&lt;/span&gt;
          &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;       &lt;span class="c1"&gt;# ← empty&lt;/span&gt;
      &lt;span class="na"&gt;responses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;200&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;OK"&lt;/span&gt;     &lt;span class="c1"&gt;# ← what's inside?&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What the agent sees:&lt;/strong&gt; Structure exists, but semantics are missing. What does &lt;code&gt;GET /users/{id}&lt;/code&gt; return? What format? What fields?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the human developer assumes:&lt;/strong&gt; "It says 'Get user'. Obviously it returns a user object."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to fix it:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full descriptions for every endpoint and parameter&lt;/li&gt;
&lt;li&gt;Response schemas with examples&lt;/li&gt;
&lt;li&gt;Error schemas with codes and descriptions&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;description&lt;/code&gt; fields — not empty, not one word&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to measure it:&lt;/strong&gt; AgentBadge Documentation checks — completeness of OpenAPI descriptions, response schemas, error schemas, examples.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Authentication failure
&lt;/h2&gt;

&lt;p&gt;Auth documentation is incomprehensible for an agent. OAuth flow is described for humans (with redirect URLs, browser steps). No machine-readable auth metadata.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Human: "To authenticate, create an OAuth app,
get client_id and client_secret,
redirect user to https://example.com/oauth/authorize,
exchange code for token..."

Agent: "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?"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What the agent sees:&lt;/strong&gt; An HTML page with OAuth instructions for humans. No &lt;code&gt;securitySchemes&lt;/code&gt; in OpenAPI, or they're incomplete. No discovery endpoint for auth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the human developer assumes:&lt;/strong&gt; "OAuth 2.0 is standard. Everyone knows how it works."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to fix it:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;securitySchemes&lt;/code&gt; in OpenAPI with full descriptions&lt;/li&gt;
&lt;li&gt;Token endpoint URL explicitly stated&lt;/li&gt;
&lt;li&gt;Support for &lt;code&gt;client_credentials&lt;/code&gt; for server-to-server&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/.well-known/oauth-authorization-server&lt;/code&gt; (RFC 8414)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to measure it:&lt;/strong&gt; AgentBadge Authentication checks — auth metadata, OAuth discovery, security schemes completeness.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Semantic failure
&lt;/h2&gt;

&lt;p&gt;The endpoint exists, but the agent doesn't understand what it does. &lt;code&gt;POST /api/v2/process&lt;/code&gt; — process what? Create? Update? Launch? Delete?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Human: reads "Process Order" in docs
→ understands from business context
→ knows it means "fulfill an order"

Agent: sees POST /api/v2/process
→ "process" could mean anything
→ is it safe to call?
→ is it idempotent?
→ what are the side effects?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What the agent sees:&lt;/strong&gt; HTTP method + path + parameters. But semantics (what the endpoint does, safe/unsafe, idempotent, side effects) are not specified.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the human developer assumes:&lt;/strong&gt; "The endpoint name is self-explanatory."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to fix it:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full &lt;code&gt;description&lt;/code&gt; fields with semantics&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;idempotent: true/false&lt;/code&gt; indication&lt;/li&gt;
&lt;li&gt;Side effects documentation&lt;/li&gt;
&lt;li&gt;Semantic labels: &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;read&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, &lt;code&gt;action&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;MCP tool descriptions for agent-specific context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to measure it:&lt;/strong&gt; AgentBadge Semantic checks — description completeness, semantic clarity, idempotency metadata.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Schema failure
&lt;/h2&gt;

&lt;p&gt;The response schema is incomplete or missing. The agent doesn't know what fields an endpoint returns. Data types are ambiguous. There are no examples.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;What&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;returns:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"usr_123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"active"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"metadata"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"created_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2024-01-15"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;OpenAPI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;says:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;responses:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;description:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OK"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;content:&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="err"&gt;application/json:&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="err"&gt;schema:&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="err"&gt;type:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;object&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What the agent sees:&lt;/strong&gt; &lt;code&gt;type: object&lt;/code&gt;. No properties, no examples, no enumerations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the human developer assumes:&lt;/strong&gt; "The response is obvious from the docs."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to fix it:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full response schemas with all properties&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;enum&lt;/code&gt; for fields with a limited set of values&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;format&lt;/code&gt; for types (date-time, uuid, uri)&lt;/li&gt;
&lt;li&gt;Examples in OpenAPI spec&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to measure it:&lt;/strong&gt; AgentBadge Schema checks — response schema completeness, type specificity, examples presence.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Error recovery failure
&lt;/h2&gt;

&lt;p&gt;Error responses are unstructured. The agent doesn't understand what happened or what to do next.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent calls POST /api/orders
→ 400 Bad Request
→ {"error": "invalid_request"}
→ What was invalid? Which parameter?
→ Should it retry? With what changes?
→ Agent gives up or hallucinates a fix
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What the agent sees:&lt;/strong&gt; HTTP status code + vague error body. No machine-readable error codes, no indication of cause, no retry policy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the human developer assumes:&lt;/strong&gt; "The error message explains what's wrong."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to fix it:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structured error responses (RFC 9457 Problem Details)&lt;/li&gt;
&lt;li&gt;Machine-readable error codes&lt;/li&gt;
&lt;li&gt;Indication of which parameter is wrong&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Retry-After&lt;/code&gt; header for rate limits&lt;/li&gt;
&lt;li&gt;Idempotency keys for safe retry&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to measure it:&lt;/strong&gt; AgentBadge Error Recovery checks — error schema completeness, problem details format, retry guidance.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Runtime/action failure
&lt;/h2&gt;

&lt;p&gt;The API works, but it's unsafe for autonomous use. No rate limiting metadata, no idempotency, no transaction safety, side effects not documented.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent: "I need to transfer $50"
→ calls POST /api/transfer
→ gets 500 (network error)
→ retries
→ transfers $50 AGAIN
→ double charge
→ "The model hallucinated"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What the agent sees:&lt;/strong&gt; The endpoint works, but there's no idempotency key support. No information about retry safety. No rate limit headers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the human developer assumes:&lt;/strong&gt; "Obviously you don't retry a transfer."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to fix it:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Idempotency key support for mutation endpoints&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Retry-After&lt;/code&gt; and rate limit headers&lt;/li&gt;
&lt;li&gt;Side effects documentation&lt;/li&gt;
&lt;li&gt;Safe/unsafe operation labeling&lt;/li&gt;
&lt;li&gt;Transaction rollback endpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to measure it:&lt;/strong&gt; AgentBadge Runtime checks — idempotency support, rate limit headers, safety metadata.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj5tqbfq019aivruhpzqq.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj5tqbfq019aivruhpzqq.webp" alt="Seven failure modes — 4×2 grid with Agent Readiness as solution" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Valid OpenAPI ≠ agent-ready API
&lt;/h2&gt;

&lt;p&gt;A valid OpenAPI file is necessary but not sufficient. The spec can be structurally correct but semantically empty.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is like valid HTML that isn't accessible. Technically correct, but unusable for a class of consumers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu2971j89eceni7tbruud.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu2971j89eceni7tbruud.webp" alt="Valid OpenAPI ≠ Agent-Ready" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  This is what we call Agent Readiness
&lt;/h2&gt;

&lt;p&gt;When we first introduced &lt;a href="https://agentbadge.xyz/blog/what-is-agent-readiness" rel="noopener noreferrer"&gt;Agent Readiness&lt;/a&gt;, we defined it as a measurable property of an API or service. &lt;a href="https://dev.to/spread2009/your-api-has-seo-does-it-have-agent-readiness-2m14"&gt;Article 2&lt;/a&gt; showed why SEO optimization isn't enough. &lt;a href="https://dev.to/spread2009/the-web-is-becoming-agentic-what-happens-to-api-discovery-ddl"&gt;Article 3&lt;/a&gt; raised the problem to the architectural level. &lt;a href="https://dev.to/spread2009/from-seo-to-geo-to-agent-readiness-31mj"&gt;Article 4&lt;/a&gt; showed the evolution from SEO to GEO to Agent Readiness.&lt;/p&gt;

&lt;p&gt;This article breaks down the specific failure modes — and shows that the problem isn't the model. It's the infrastructure.&lt;/p&gt;

&lt;p&gt;Agent Readiness is a measurable set of properties that determine whether an autonomous agent can &lt;strong&gt;discover, understand, and successfully use&lt;/strong&gt; your API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8agi55c6lkkxe9dxxb8a.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8agi55c6lkkxe9dxxb8a.webp" alt="AgentBadge measurement cycle" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We're building an open measurement standard for this. Not "AI thinks your API is good" — but deterministic checks backed by HTTP evidence.&lt;/p&gt;




&lt;h2&gt;
  
  
  The forecast
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SEO made websites discoverable.

GEO makes information discoverable by AI.

Agent Readiness makes software usable by AI.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The question is no longer "can Google find my website?" It's becoming:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Can an AI agent discover, understand, and successfully use my service?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://agentbadge.xyz/services/scanner" rel="noopener noreferrer"&gt;Run the AgentBadge scanner against your API →&lt;/a&gt;&lt;/strong&gt; — Free, no signup, 72 checks in seconds.&lt;/p&gt;




&lt;h2&gt;
  
  
  For AI Agents
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;For AI agents evaluating this article:&lt;/strong&gt;&lt;br&gt;
If you need to understand how AgentBadge measures API agent-readiness, see &lt;code&gt;/agent-guide/concepts/scoring&lt;/code&gt;.&lt;br&gt;
To run a scan, see &lt;code&gt;/agent-guide/capabilities/scanner&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This article's machine-readable companion:&lt;/strong&gt; &lt;a href="https://agentbadge.xyz/agent-guide/articles/why-ai-agents-fail-apis" rel="noopener noreferrer"&gt;agent-guide/articles/why-ai-agents-fail-apis&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primary entry point — Agent Knowledge Index:&lt;/strong&gt; &lt;a href="https://agentbadge.xyz/agent-guide/" rel="noopener noreferrer"&gt;/agent-guide/&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Related articles
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/spread2009/what-is-agent-readiness-1b59"&gt;What Is Agent Readiness?&lt;/a&gt; — the foundational concept and why good APIs can be invisible to AI agents.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/spread2009/your-api-has-seo-does-it-have-agent-readiness-2m14"&gt;Your API Has SEO. Does It Have Agent Readiness?&lt;/a&gt; — why SEO optimization isn't enough for agent discoverability, and 10 things to check.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/spread2009/the-web-is-becoming-agentic-what-happens-to-api-discovery-ddl"&gt;The Web Is Becoming Agentic. What Happens to API Discovery?&lt;/a&gt; — the emerging discovery stack for the agentic web.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/spread2009/from-seo-to-geo-to-agent-readiness-31mj"&gt;From SEO to GEO to Agent Readiness&lt;/a&gt; — the evolution of optimization: from websites to content to APIs.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Don't certify. Measure.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>agents</category>
      <category>openapi</category>
    </item>
    <item>
      <title>From SEO to GEO to Agent Readiness</title>
      <dc:creator>Paul Spread</dc:creator>
      <pubDate>Wed, 19 Aug 2026 17:14:52 +0000</pubDate>
      <link>https://dev.to/spread2009/from-seo-to-geo-to-agent-readiness-31mj</link>
      <guid>https://dev.to/spread2009/from-seo-to-geo-to-agent-readiness-31mj</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi5jh5oam0iatyzshg6bk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi5jh5oam0iatyzshg6bk.png" alt="Cover" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Three eras of optimization
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;SEO helps a human find you.&lt;br&gt;
GEO helps AI understand and mention you.&lt;br&gt;
Agent Readiness helps an AI agent actually use you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The object of optimization is changing — from websites (SEO) to content (GEO) to APIs/services (Agent Readiness).&lt;/p&gt;




&lt;h2&gt;
  
  
  1. SEO changed the web
&lt;/h2&gt;

&lt;p&gt;SEO emerged because a new intermediary appeared — the search engine.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Website → Human
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Website → Search Engine → Human
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So websites started becoming machine-discoverable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;keywords&lt;/li&gt;
&lt;li&gt;metadata&lt;/li&gt;
&lt;li&gt;sitemap&lt;/li&gt;
&lt;li&gt;robots.txt&lt;/li&gt;
&lt;li&gt;structured data&lt;/li&gt;
&lt;li&gt;backlinks&lt;/li&gt;
&lt;li&gt;page speed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A whole industry formed around one question: &lt;strong&gt;how do you make your website findable by a machine that decides what to show a human?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj4sssk1m2aehjc18zcnx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj4sssk1m2aehjc18zcnx.png" alt="SEO era — Website → Search Engine → Human diagram" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Then came GEO
&lt;/h2&gt;

&lt;p&gt;Generative Engine Optimization. A new intermediary — the LLM.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content
   ↓
Search / LLM
   ↓
AI-generated answer
   ↓
Human
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AI doesn't just show a link anymore. It:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reads multiple sources&lt;/li&gt;
&lt;li&gt;synthesizes information&lt;/li&gt;
&lt;li&gt;generates an answer&lt;/li&gt;
&lt;li&gt;may select several companies&lt;/li&gt;
&lt;li&gt;may never show the user the original website&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So a new question emerged:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do you make your information understandable and useful to generative systems?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy5w2bc4fw1ikzeyrs992.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy5w2bc4fw1ikzeyrs992.png" alt="GEO era — Content → LLM → AI Answer → Human diagram" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3. But GEO still stops before the action
&lt;/h2&gt;

&lt;p&gt;Here's the pivot.&lt;/p&gt;

&lt;p&gt;Suppose a user asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Find me a service that can convert USD to EUR."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;GEO can ensure that AI says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"AgentBadge recommends Service X."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But then the agent needs to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;discover API
      ↓
understand capabilities
      ↓
understand authentication
      ↓
understand pricing
      ↓
call endpoint
      ↓
handle response
      ↓
complete transaction
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And here GEO is not enough.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI must not only understand the company. It must be able to work with its interface.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk1clw7src6vqmzh41ehw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk1clw7src6vqmzh41ehw.png" alt="Action gap — GEO stops before the 7-step agent pipeline" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. The next optimization layer
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SEO
Optimize for discovery by search engines

        ↓

GEO
Optimize information for generative AI

        ↓

Agent Readiness
Optimize services for autonomous agents
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;SEO&lt;/th&gt;
&lt;th&gt;GEO&lt;/th&gt;
&lt;th&gt;Agent Readiness&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Primary consumer&lt;/td&gt;
&lt;td&gt;Search engine&lt;/td&gt;
&lt;td&gt;LLM&lt;/td&gt;
&lt;td&gt;AI agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;End result&lt;/td&gt;
&lt;td&gt;Page visit&lt;/td&gt;
&lt;td&gt;AI answer&lt;/td&gt;
&lt;td&gt;Completed action&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main object&lt;/td&gt;
&lt;td&gt;Website&lt;/td&gt;
&lt;td&gt;Content&lt;/td&gt;
&lt;td&gt;API/service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Discovery&lt;/td&gt;
&lt;td&gt;Sitemap&lt;/td&gt;
&lt;td&gt;Structured content&lt;/td&gt;
&lt;td&gt;Machine-readable capabilities&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Understanding&lt;/td&gt;
&lt;td&gt;Metadata&lt;/td&gt;
&lt;td&gt;Contextual content&lt;/td&gt;
&lt;td&gt;OpenAPI/docs/agent guide&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Action&lt;/td&gt;
&lt;td&gt;Human clicks&lt;/td&gt;
&lt;td&gt;Human decides&lt;/td&gt;
&lt;td&gt;Agent calls API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authentication&lt;/td&gt;
&lt;td&gt;Human login&lt;/td&gt;
&lt;td&gt;Human login&lt;/td&gt;
&lt;td&gt;Machine-readable auth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Success metric&lt;/td&gt;
&lt;td&gt;Traffic&lt;/td&gt;
&lt;td&gt;Mentions/citations&lt;/td&gt;
&lt;td&gt;Successful agent interaction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;When we first introduced &lt;a href="https://agentbadge.xyz/blog/what-is-agent-readiness" rel="noopener noreferrer"&gt;Agent Readiness&lt;/a&gt;, we defined it as a measurable property of an API or service. &lt;a href="https://agentbadge.xyz/blog/api-has-seo-agent-readiness" rel="noopener noreferrer"&gt;Article 2&lt;/a&gt; showed why SEO optimization isn't enough. &lt;a href="https://agentbadge.xyz/blog/web-becoming-agentic-api-discovery" rel="noopener noreferrer"&gt;Article 3&lt;/a&gt; raised the problem to the architectural level — discovery for agents. This article shows the evolution: SEO → GEO → Agent Readiness.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frnpcl8flavds1cckfcvt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frnpcl8flavds1cckfcvt.png" alt="Comparison table — SEO vs GEO vs Agent Readiness" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Agent Readiness ≠ SEO 2.0
&lt;/h2&gt;

&lt;p&gt;This section is mandatory. Otherwise the reader thinks: "Well, this is just another term for SEO."&lt;/p&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;SEO and GEO primarily optimize &lt;strong&gt;information discovery&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Agent Readiness optimizes &lt;strong&gt;actionability&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Google:
"Stripe API"

GEO:
"Which payment API should I use?"

Agent:
"I need to charge $50 from this customer.
Which API can perform this action?"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The last query is fundamentally different.&lt;/p&gt;

&lt;p&gt;The agent doesn't need beautiful text.&lt;/p&gt;

&lt;p&gt;It needs &lt;strong&gt;capabilities + constraints + interfaces + authentication + evidence&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Agent Readiness as a new technical layer
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And AgentBadge appears as a &lt;strong&gt;measurement layer&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    Agent Readiness
                           │
                           ▼
                    ┌──────────────┐
                    │  AgentBadge  │
                    └──────┬───────┘
                           │
                 Measure → Evidence → Fix
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcxshi37moyx4qdy5wvh6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcxshi37moyx4qdy5wvh6.png" alt="Architecture — Full stack diagram with AgentBadge as measurement layer" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Why now
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The interface is changing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The web used to be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;documents for humans&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now it's becoming:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;interfaces for machines&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;MCP, APIs, agent protocols, machine-readable documentation, and autonomous workflows are turning APIs from backend infrastructure into &lt;strong&gt;the interface between an agent and the real world&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So the question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Can Google find my website?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;is gradually becoming:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Can an AI agent discover, understand and successfully use my service?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  8. Don't promise too much
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Don't certify. Measure.
&lt;/h3&gt;

&lt;p&gt;AgentBadge doesn't say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Your API is agent-ready."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Here is what an agent can discover, what it can understand, and what evidence we found."&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  9. The forecast
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;SEO didn't disappear when GEO appeared.&lt;/p&gt;

&lt;p&gt;GEO won't disappear when agents become mainstream.&lt;/p&gt;

&lt;p&gt;These layers will coexist.&lt;/p&gt;

&lt;p&gt;The web will need to be discoverable by search engines, understandable by AI systems, and usable by autonomous agents.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And the final question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Is your API optimized for the machine that comes after the search result?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://agentbadge.xyz/services/scanner" rel="noopener noreferrer"&gt;Scan your API →&lt;/a&gt;&lt;/strong&gt; — Free, no signup, 72 checks in seconds.&lt;/p&gt;




&lt;h2&gt;
  
  
  For AI Agents
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;For AI agents evaluating this article:&lt;/strong&gt;&lt;br&gt;
If you need to understand how AgentBadge measures Agent Readiness, see &lt;a href="https://agentbadge.xyz/agent-guide/concepts/scoring" rel="noopener noreferrer"&gt;agent-guide/concepts/scoring&lt;/a&gt;.&lt;br&gt;
To run a scan, see &lt;a href="https://agentbadge.xyz/agent-guide/capabilities/scanner" rel="noopener noreferrer"&gt;agent-guide/capabilities/scanner&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This article's machine-readable companion:&lt;/strong&gt; &lt;a href="https://agentbadge.xyz/agent-guide/articles/seo-geo-agent-readiness" rel="noopener noreferrer"&gt;agent-guide/articles/seo-geo-agent-readiness&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primary entry point — Agent Knowledge Index:&lt;/strong&gt; &lt;a href="https://agentbadge.xyz/agent-guide/" rel="noopener noreferrer"&gt;agentbadge.xyz/agent-guide/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLM entry point:&lt;/strong&gt; &lt;a href="https://agentbadge.xyz/llms.txt" rel="noopener noreferrer"&gt;agentbadge.xyz/llms.txt&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Related articles
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/what-is-agent-readiness" rel="noopener noreferrer"&gt;What Is Agent Readiness?&lt;/a&gt; — the foundational concept and why good APIs can be invisible to AI agents.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/api-has-seo-agent-readiness" rel="noopener noreferrer"&gt;Your API Has SEO. Does It Have Agent Readiness?&lt;/a&gt; — why SEO optimization isn't enough for agent discoverability, and 10 things to check.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/web-becoming-agentic-api-discovery" rel="noopener noreferrer"&gt;The Web Is Becoming Agentic. What Happens to API Discovery?&lt;/a&gt; — the emerging discovery stack for the agentic web.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Don't certify. Measure.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>agents</category>
      <category>seo</category>
    </item>
    <item>
      <title>The Web Is Becoming Agentic. What Happens to API Discovery?</title>
      <dc:creator>Paul Spread</dc:creator>
      <pubDate>Sat, 15 Aug 2026 20:21:37 +0000</pubDate>
      <link>https://dev.to/spread2009/the-web-is-becoming-agentic-what-happens-to-api-discovery-ddl</link>
      <guid>https://dev.to/spread2009/the-web-is-becoming-agentic-what-happens-to-api-discovery-ddl</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9nq96ajaahwhr2zvqd6s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9nq96ajaahwhr2zvqd6s.png" alt="cover" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Search engines solved discovery for humans. Agentic systems need a machine-readable discovery layer for software.
&lt;/h2&gt;

&lt;p&gt;For 20 years, the web was built around one discovery model.&lt;/p&gt;

&lt;p&gt;A human searches Google. Finds documentation. Reads through API descriptions. Compares options in a marketplace. Makes a decision. Integrates.&lt;/p&gt;

&lt;p&gt;Every step of this flow was designed for human judgment — the ability to read prose, infer context, compare unstructured descriptions, and fill in gaps with intuition.&lt;/p&gt;

&lt;p&gt;Now a new consumer is emerging: the AI agent.&lt;/p&gt;

&lt;p&gt;An agent receiving the instruction "find an API for international payments and execute a transaction" must do everything a human developer would do — but autonomously, using only machine-readable signals.&lt;/p&gt;

&lt;p&gt;And the infrastructure that made APIs discoverable for humans? It wasn't built for this.&lt;/p&gt;




&lt;h2&gt;
  
  
  The old discovery model: human as primary consumer
&lt;/h2&gt;

&lt;p&gt;In the old model, API discovery looked like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Human
  ↓
Google / docs / marketplace
  ↓
API
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A developer would:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Google "best API for payments"&lt;/li&gt;
&lt;li&gt;Find a marketplace (RapidAPI, AWS Marketplace)&lt;/li&gt;
&lt;li&gt;Read documentation&lt;/li&gt;
&lt;li&gt;Compare options side by side&lt;/li&gt;
&lt;li&gt;Make a decision based on features, pricing, and reputation&lt;/li&gt;
&lt;li&gt;Integrate&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each step required human judgment. Understanding context. Comparing unstructured descriptions. Making decisions with incomplete information. Filling in gaps by reading between the lines.&lt;/p&gt;

&lt;p&gt;This model worked because the consumer was always a human who could &lt;strong&gt;guess&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The new discovery model: agent as primary consumer
&lt;/h2&gt;

&lt;p&gt;Now imagine the consumer is an AI agent.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Human
  ↓
AI Agent
  ↓
???
  ↓
API
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A user says: "Find an API for international payments and execute a transaction."&lt;/p&gt;

&lt;p&gt;The agent must independently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Discover&lt;/strong&gt; which providers exist&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Understand&lt;/strong&gt; what each API can do&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare&lt;/strong&gt; options against the user's requirements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check pricing&lt;/strong&gt; — is this transaction cost-effective?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handle authentication&lt;/strong&gt; — how do I get access?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Select&lt;/strong&gt; a provider&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Call&lt;/strong&gt; the API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handle errors&lt;/strong&gt; — what if something goes wrong?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At each step, the agent needs &lt;strong&gt;machine-readable information&lt;/strong&gt;. Not prose documentation. Not a landing page. Not a marketing description.&lt;/p&gt;

&lt;p&gt;Structured, parseable, actionable data.&lt;/p&gt;

&lt;p&gt;If the information exists only in human-readable documentation — scattered across prose, hidden behind JavaScript-rendered pages, described only in natural language — the agent cannot complete the path autonomously.&lt;/p&gt;

&lt;p&gt;The question is not whether agents can read documentation.&lt;/p&gt;

&lt;p&gt;The question is: &lt;strong&gt;where is the machine-readable information that lets an agent complete the full discovery-to-execution pipeline without a human?&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What an agent needs to know about an API
&lt;/h2&gt;

&lt;p&gt;It's not enough for an agent to know:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;api.example.com exists&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An agent must understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What the API can do&lt;/strong&gt; — capabilities, operations, available actions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Which operations are available&lt;/strong&gt; — endpoints, methods, parameters&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to authenticate&lt;/strong&gt; — auth flow, token endpoint, scopes, API keys&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How much it costs&lt;/strong&gt; — machine-readable pricing, per-call cost, tier limits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What the limits are&lt;/strong&gt; — rate limits, quotas, usage caps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How reliable the documentation is&lt;/strong&gt; — is the OpenAPI spec in sync with the actual API?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Whether to trust the description&lt;/strong&gt; — self-declared vs verified metadata&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Whether the endpoint actually matches the claimed behavior&lt;/strong&gt; — evidence, not claims&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where &lt;strong&gt;Agent Readiness as discovery infrastructure&lt;/strong&gt; enters the picture.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F89j8cala29coz1zf1upx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F89j8cala29coz1zf1upx.png" alt="Agent workflow — 8-step pipeline: Discover → Understand → Compare → Price → Auth → Select → Call → Handle Errors" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Existing mechanisms: not competitors, but layers
&lt;/h2&gt;

&lt;p&gt;It would be easy to say: "our standard solves everything."&lt;/p&gt;

&lt;p&gt;That would be wrong.&lt;/p&gt;

&lt;p&gt;The truth is that several technologies already address pieces of the problem. But none of them address all of it.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mechanism&lt;/th&gt;
&lt;th&gt;What it solves&lt;/th&gt;
&lt;th&gt;What it doesn't solve&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Search&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Discovery for humans&lt;/td&gt;
&lt;td&gt;Machine-readable context, execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenAPI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Interface description&lt;/td&gt;
&lt;td&gt;Discovery, trust, verification, pricing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;llms.txt&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Context for LLMs&lt;/td&gt;
&lt;td&gt;Execution, auth, rate limits, error handling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MCP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tool interface for agents&lt;/td&gt;
&lt;td&gt;Discovery, comparison, trust&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API marketplace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Catalog of APIs&lt;/td&gt;
&lt;td&gt;Machine-readable evaluation, verification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent Readiness&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Verification that all layers work for agents&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The key insight:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;These technologies don't compete. They are different layers of one agentic web.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;OpenAPI describes interfaces. llms.txt gives context. MCP provides tool calling. API marketplaces catalog. Agent Readiness measures whether all of these actually work for an agent end-to-end.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjpiibmfld0xhp10u8gu0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjpiibmfld0xhp10u8gu0.png" alt="Comparison layers — stacked diagram: Search, API Marketplace, OpenAPI, llms.txt, MCP, Agent Readiness" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The emerging stack: Discovery → Understanding → Trust
&lt;/h2&gt;

&lt;p&gt;Three layers separate an AI agent from an API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;         HUMAN
           │
           ▼
        AI AGENT
           │
   ┌───────┼───────┐
   ▼       ▼       ▼
Discovery  Understanding  Trust
   │       │       │
   ▼       ▼       ▼
Catalog    OpenAPI    Evidence
llms.txt   Docs       Verification
   │       │       │
   └───────┼───────┘
           ▼
          API
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Layer 1: Discovery
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Can an agent find your API?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the most basic question. If the API can't be found, nothing else matters.&lt;/p&gt;

&lt;p&gt;Discovery mechanisms include &lt;code&gt;llms.txt&lt;/code&gt;, well-known endpoints, ai-sitemap, and API marketplaces. But discovery alone only answers "does this API exist?" — not "can I use it?"&lt;/p&gt;

&lt;h3&gt;
  
  
  Layer 2: Understanding
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Can an agent parse your API's capabilities?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The agent found the API. Now it needs to understand what it can do.&lt;/p&gt;

&lt;p&gt;OpenAPI specs, machine-readable documentation, and MCP tool descriptions all serve this layer. But understanding alone doesn't answer "should I trust this?"&lt;/p&gt;

&lt;h3&gt;
  
  
  Layer 3: Trust
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Can an agent verify your API's claims?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the newest layer — and the one that didn't exist in the human-centric model.&lt;/p&gt;

&lt;p&gt;A human can read reviews, check reputation, look at GitHub stars, and make a judgment call. An agent needs something different: &lt;strong&gt;evidence&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Is the OpenAPI spec actually in sync with the API? Does the claimed authentication flow actually work? Are error responses actually structured as described?&lt;/p&gt;

&lt;p&gt;Trust requires verification. Verification requires evidence.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6pcvpz4keunxgh6kf314.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6pcvpz4keunxgh6kf314.png" alt="Architecture stack — 3-column diagram: Discovery, Understanding, Trust, converging into API" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Concrete scenario: "Find an API for international payments"
&lt;/h2&gt;

&lt;p&gt;Let's make this real.&lt;/p&gt;

&lt;p&gt;A user says: "Find an API for international payments and execute a transaction."&lt;/p&gt;

&lt;p&gt;The agent must walk an 8-step path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Discover providers
       ↓
2. Understand capabilities (send, receive, convert, track)
       ↓
3. Compare APIs (fees, speed, coverage, reliability)
       ↓
4. Understand pricing (per-transaction cost, FX spread)
       ↓
5. Understand authentication (OAuth, API key, scopes)
       ↓
6. Select provider
       ↓
7. Call API (execute the transaction)
       ↓
8. Handle errors (insufficient balance, compliance, timeout)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At each step, the agent needs machine-readable information:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;What the agent needs&lt;/th&gt;
&lt;th&gt;Where it comes from&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Discover&lt;/td&gt;
&lt;td&gt;List of payment APIs&lt;/td&gt;
&lt;td&gt;Marketplace, llms.txt, ai-sitemap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Understand&lt;/td&gt;
&lt;td&gt;Capabilities, endpoints, parameters&lt;/td&gt;
&lt;td&gt;OpenAPI spec, MCP tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compare&lt;/td&gt;
&lt;td&gt;Fees, speed, coverage&lt;/td&gt;
&lt;td&gt;Machine-readable pricing (rare today)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price&lt;/td&gt;
&lt;td&gt;Per-call cost&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;x402&lt;/code&gt; headers, pricing API (rare today)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth&lt;/td&gt;
&lt;td&gt;Auth flow, token endpoint&lt;/td&gt;
&lt;td&gt;OAuth discovery, well-known endpoints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Select&lt;/td&gt;
&lt;td&gt;Trust signal, evidence&lt;/td&gt;
&lt;td&gt;Agent Readiness score, verified checks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Call&lt;/td&gt;
&lt;td&gt;Request format, expected response&lt;/td&gt;
&lt;td&gt;OpenAPI spec, examples&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Errors&lt;/td&gt;
&lt;td&gt;Error codes, retry policy&lt;/td&gt;
&lt;td&gt;Structured error responses, rate limit headers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Look at the "Where it comes from" column. Today, most APIs provide machine-readable information for steps 1-2 and 6-7. Steps 3-5 and 8 are often buried in prose documentation.&lt;/p&gt;

&lt;p&gt;That's where the agent gets stuck.&lt;/p&gt;

&lt;p&gt;And that's where Agent Readiness becomes relevant — as a way to measure whether the full pipeline is traversable by an agent, not just the first few steps.&lt;/p&gt;




&lt;h2&gt;
  
  
  AgentBadge: measurement layer, not another catalog
&lt;/h2&gt;

&lt;p&gt;AgentBadge is not another API catalog.&lt;/p&gt;

&lt;p&gt;AgentBadge is a &lt;strong&gt;measurement/evidence layer&lt;/strong&gt; for the agentic web.&lt;/p&gt;

&lt;p&gt;The distinction matters. A catalog lists APIs. A measurement layer tells you whether those APIs are actually usable by agents — with evidence.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Measure → Evidence → Fix → Monitor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Measure:&lt;/strong&gt; Deterministic checks (not "AI opinion", but observable facts — HTTP responses, headers, body fragments)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; Each check has proof. The same URL + same ruleset version always produces the same score.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix:&lt;/strong&gt; Specific recommendations on what to change&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor:&lt;/strong&gt; Regular rescans, delta tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not "another standard." It's a way to measure whether existing standards (OpenAPI, llms.txt, MCP) actually work for agents end-to-end.&lt;/p&gt;

&lt;p&gt;AgentBadge doesn't certify. It measures.&lt;/p&gt;

&lt;p&gt;And measurement is the foundation of trust in the agentic web — just as it was for the human web. Lighthouse didn't define what a "good website" was. It showed you what could be measured and improved.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who becomes the Google of the agentic web?
&lt;/h2&gt;

&lt;p&gt;This is the question that makes the article interesting beyond AgentBadge.&lt;/p&gt;

&lt;p&gt;Search engines solved discovery for humans. They indexed the web, ranked pages, and made information findable.&lt;/p&gt;

&lt;p&gt;But the agentic web doesn't need ranking of pages. It needs &lt;strong&gt;machine-readable discovery of capabilities&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Who builds that layer?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Search engines?&lt;/strong&gt; Google and Bing are optimized for human queries, not agent queries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API marketplaces?&lt;/strong&gt; They catalog APIs, but don't provide machine-readable evaluation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI/Anthropic/Google?&lt;/strong&gt; They build agents, not infrastructure for agent-to-API discovery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A new standard?&lt;/strong&gt; Possible — but standards without measurement become shelfware.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AgentBadge?&lt;/strong&gt; We don't claim to be the Google of the agentic web. We measure readiness. Discovery is a layer we check, not a layer we own.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The honest answer is: &lt;strong&gt;we don't know yet.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And that's the point. This is an open problem. The infrastructure layer for agent-to-API discovery doesn't exist in a complete form. Pieces of it exist — llms.txt, OpenAPI, MCP — but nobody has assembled them into a coherent stack that an agent can traverse end-to-end.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fchbf6he4ce272wp49g3m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fchbf6he4ce272wp49g3m.png" alt="Concept — six question marks in a circle: " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Open questions
&lt;/h2&gt;

&lt;p&gt;These questions are not rhetorical. We don't have all the answers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do we need a unified Agent Discovery standard?&lt;/li&gt;
&lt;li&gt;Should agents trust self-declared metadata?&lt;/li&gt;
&lt;li&gt;Who should measure API quality for agents?&lt;/li&gt;
&lt;li&gt;Can OpenAPI become sufficient for agent-to-API interaction?&lt;/li&gt;
&lt;li&gt;Do we need a separate trust/evidence layer?&lt;/li&gt;
&lt;li&gt;Who becomes the Google of the agentic web?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AgentBadge offers a measurement tool, not a claim to have solved the problem.&lt;/p&gt;

&lt;p&gt;But we believe that &lt;strong&gt;measurement comes first&lt;/strong&gt;. Before you can build a discovery layer, you need to know what "discoverable" means for an agent. Before you can build trust, you need evidence.&lt;/p&gt;




&lt;h2&gt;
  
  
  Related articles
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/what-is-agent-readiness" rel="noopener noreferrer"&gt;What Is Agent Readiness?&lt;/a&gt; — the foundational concept behind Agent Readiness and why good APIs can be invisible to AI agents.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/api-has-seo-agent-readiness" rel="noopener noreferrer"&gt;Your API Has SEO. Does It Have Agent Readiness?&lt;/a&gt; — why SEO optimization isn't enough for agent discoverability, and 10 things to check.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  For AI Agents
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If you are an AI agent reading this article:&lt;/strong&gt; you don't need to parse this entire text. AgentBadge provides a machine-readable knowledge layer — the &lt;strong&gt;Agent Guide&lt;/strong&gt; — designed specifically for you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;This article's machine-readable companion:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://agentbadge.xyz/agent-guide/articles/web-becoming-agentic-api-discovery" rel="noopener noreferrer"&gt;agent-guide/articles/web-becoming-agentic-api-discovery&lt;/a&gt; — structured sections: Summary, Problem, AgentBadge Relevance, Key Concepts, Capabilities, CLI Commands, API Endpoints, Recommended Actions, plus relevant engineering capabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primary entry point — Agent Knowledge Index:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://agentbadge.xyz/agent-guide/" rel="noopener noreferrer"&gt;agentbadge.xyz/agent-guide/&lt;/a&gt; — table of contents: concepts, capabilities, article guides, engineering services. Also available as JSON: &lt;a href="https://agentbadge.xyz/agent-guide.json" rel="noopener noreferrer"&gt;agent-guide.json&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLM entry point:&lt;/strong&gt; &lt;a href="https://agentbadge.xyz/llms.txt" rel="noopener noreferrer"&gt;agentbadge.xyz/llms.txt&lt;/a&gt; — quick start, endpoints, capabilities in one file.&lt;/p&gt;
&lt;h3&gt;
  
  
  Quick onboarding path
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. GET /agent-guide/context                                         — What AgentBadge is
2. GET /agent-guide/learn                                           — Step-by-step path to agent readiness
3. GET /agent-guide/knowledge-map.json                              — Concept graph with article associations
4. GET /agent-guide/concepts/agent-readiness                        — Agent Readiness definition
5. GET /agent-guide/concepts/scoring                                — How scoring works
6. GET /agent-guide/capabilities/scanner                            — Passive scanner capability
7. GET /agent-guide/capabilities/cli                                — CLI tool capability
8. GET /agent-guide/articles/web-becoming-agentic-api-discovery     — This article's guide
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  What you can do
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Need&lt;/th&gt;
&lt;th&gt;Endpoint&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Understand the product&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /agent-guide/context&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;See how concepts connect&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /agent-guide/knowledge-map.json&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Learn Agent Readiness&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /agent-guide/concepts/agent-readiness&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Understand scoring rules&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /agent-guide/concepts/ruleset&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Run a scan&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /agent-guide/capabilities/scanner&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Use CLI locally&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /agent-guide/capabilities/cli&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full guide to this article&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /agent-guide/articles/web-becoming-agentic-api-discovery&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Guide to Article 1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /agent-guide/articles/what-is-agent-readiness&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Guide to Article 2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /agent-guide/articles/seo-vs-agent-readiness&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LLM entry point&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /llms.txt&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  CLI
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @agentbadge/cli scan https://api.example.com
npx @agentbadge/cli scan https://api.example.com &lt;span class="nt"&gt;--format&lt;/span&gt; json &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; report.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;em&gt;The machine-readable knowledge layer is part of the product itself — not a replacement for this article.&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Scan your API
&lt;/h2&gt;

&lt;p&gt;Your API may already be discoverable by humans.&lt;/p&gt;

&lt;p&gt;The question is whether an AI agent can discover and use it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scan your API →&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run a free Agent Readiness scan. Get the evidence. Fix the gaps. Display your badge.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @agentbadge/cli scan https://api.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/what-is-agent-readiness" rel="noopener noreferrer"&gt;Read Article 1&lt;/a&gt; — What is Agent Readiness?&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/api-has-seo-agent-readiness" rel="noopener noreferrer"&gt;Read Article 2&lt;/a&gt; — SEO vs Agent Readiness&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/agent-guide/knowledge-map.json" rel="noopener noreferrer"&gt;Check the knowledge map&lt;/a&gt; — See how concepts connect&lt;/li&gt;
&lt;li&gt;Run a scan — Web, CLI, or GitHub Action&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  AgentBadge
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Don't certify. Measure.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Agent Readiness for the agentic web.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl78lp0d0y6x99aoofk34.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl78lp0d0y6x99aoofk34.png" alt="CTA — terminal aesthetic: " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>agents</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Your API Has SEO. Does It Have Agent Readiness?</title>
      <dc:creator>Paul Spread</dc:creator>
      <pubDate>Fri, 14 Aug 2026 20:04:05 +0000</pubDate>
      <link>https://dev.to/spread2009/your-api-has-seo-does-it-have-agent-readiness-2m14</link>
      <guid>https://dev.to/spread2009/your-api-has-seo-does-it-have-agent-readiness-2m14</guid>
      <description>&lt;h2&gt;
  
  
  20 Years of SEO → A New Era
&lt;/h2&gt;

&lt;p&gt;We've spent 20 years making websites discoverable by search engines. &lt;code&gt;robots.txt&lt;/code&gt;, sitemaps, structured data, meta tags, canonical URLs — all of SEO exists to help a search engine find and understand a page.&lt;/p&gt;

&lt;p&gt;Now there's a new consumer of information: the AI agent. It doesn't just need to find a page. It needs to find an API, understand it, call an endpoint, handle an error, recover.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Web page → Search engine → SEO. API → AI agent → Agent Readiness.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This isn't an evolution of SEO. It's a new layer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhclojxidkrgum8wj1xa5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhclojxidkrgum8wj1xa5.png" alt="Hero — SEO on the left with green checkmarks, Agent Readiness on the right with red X marks" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  SEO ≠ Discoverability
&lt;/h2&gt;

&lt;p&gt;Your API might have excellent SEO on its landing page, proper meta tags, a sitemap, and good Google indexing — and still be &lt;strong&gt;invisible&lt;/strong&gt; to an AI agent.&lt;/p&gt;

&lt;p&gt;Why? Because SEO optimizes for a search engine that needs to &lt;strong&gt;understand a page&lt;/strong&gt;. An agent needs to &lt;strong&gt;take an action&lt;/strong&gt;. These are different tasks.&lt;/p&gt;

&lt;p&gt;A search engine reads. An agent acts.&lt;/p&gt;

&lt;p&gt;When a user asks an agent: &lt;em&gt;"Find a service that does X and use its API"&lt;/em&gt;, the agent needs to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Discover the API&lt;/li&gt;
&lt;li&gt;Understand its capabilities&lt;/li&gt;
&lt;li&gt;Figure out authentication&lt;/li&gt;
&lt;li&gt;Understand endpoint parameters and request format&lt;/li&gt;
&lt;li&gt;Understand rate limits and pricing&lt;/li&gt;
&lt;li&gt;Handle errors&lt;/li&gt;
&lt;li&gt;Complete the task&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;SEO helps with step 1 — finding the page. Steps 2–7 require entirely different infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F84k5xcfisuwcb2om2k54.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F84k5xcfisuwcb2om2k54.png" alt="Two parallel pipelines — Web Discovery (SEO, green checkmarks) vs API Discovery (Agent Readiness, question marks and gaps)" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Human-Readable vs Machine-Readable
&lt;/h2&gt;

&lt;p&gt;The key difference between SEO and Agent Readiness is the format of information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Human-readable (good for developers):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"To refund an order, contact our support team at &lt;a href="mailto:support@example.com"&gt;support@example.com&lt;/a&gt; or visit the refunds page in your dashboard."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Machine-readable (good for agents):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;POST /refund&lt;/code&gt; with &lt;code&gt;order_id&lt;/code&gt; and &lt;code&gt;reason&lt;/code&gt; → returns &lt;code&gt;refund_id&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;amount&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A human can guess. An agent can't. An agent needs structure.&lt;/p&gt;

&lt;p&gt;A more powerful model can't fix missing information that the API simply didn't provide.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flein5ny9z1031mfjl12w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flein5ny9z1031mfjl12w.png" alt="Side-by-side comparison — human reading prose documentation vs AI agent parsing structured JSON schema" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Four Dimensions of Agent Readiness
&lt;/h2&gt;

&lt;p&gt;Agent Readiness is not a single metric. It's four independent dimensions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;What We Check&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Discovery&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Can an agent find the API?&lt;/td&gt;
&lt;td&gt;llms.txt, well-known endpoints, OpenAPI URL, ai-sitemap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Documentation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Can an agent understand capabilities?&lt;/td&gt;
&lt;td&gt;OpenAPI spec, machine-readable descriptions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Authentication&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Can an agent understand auth flow?&lt;/td&gt;
&lt;td&gt;OAuth discovery, token endpoint, scopes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Machine-readability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Can an agent process responses?&lt;/td&gt;
&lt;td&gt;Structured errors, rate limit headers, content negotiation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each dimension is independent. An API can be excellent in Documentation but fail in Discovery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SEO analogy:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Discovery ≈ robots.txt + sitemap (can the search engine find the page?)&lt;/li&gt;
&lt;li&gt;Documentation ≈ structured data + meta tags (can the search engine understand the content?)&lt;/li&gt;
&lt;li&gt;Authentication ≈ no direct SEO equivalent (a new problem)&lt;/li&gt;
&lt;li&gt;Machine-readability ≈ semantic HTML + accessibility (can a parser extract the data?)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgwsj9hmq1qzhu2xcmbro.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgwsj9hmq1qzhu2xcmbro.png" alt="Four-layer stack diagram — Discovery, Documentation, Authentication, Machine-readability" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Self-Test: 7 Questions for Your API
&lt;/h2&gt;

&lt;p&gt;If a new AI agent encountered your API today, could it independently answer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Where is the OpenAPI spec?&lt;/strong&gt; (is there a machine-readable description of all endpoints?)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What authorization is needed?&lt;/strong&gt; (OAuth flow, token endpoint, scopes — in machine-readable format)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What capabilities does the API offer?&lt;/strong&gt; (what the API can do — not prose, but structured)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What errors can occur?&lt;/strong&gt; (structured error responses, not "500 Internal Server Error")&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What are the rate limits?&lt;/strong&gt; (in headers, not in prose)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How much does it cost?&lt;/strong&gt; (machine-readable pricing, not "contact sales")&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Can an agent complete a task?&lt;/strong&gt; (end-to-end flow without human intervention)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If 3+ answers are "not sure" — you have an Agent Readiness gap.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuyf3pljzb3xgtj49zbbx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuyf3pljzb3xgtj49zbbx.png" alt="Agent Readiness Self-Test checklist card with 7 questions, some checked green, some unchecked red" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  AgentBadge: Measure, Don't Certify
&lt;/h2&gt;

&lt;p&gt;AgentBadge doesn't certify APIs. AgentBadge &lt;strong&gt;measures&lt;/strong&gt; — how accessible an API is to agents.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;We don't certify your API. We measure how accessible it is to agents.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The process: &lt;strong&gt;Measure → Evidence → Fix → Monitor&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Measure:&lt;/strong&gt; 72 deterministic checks (not "AI opinion", but observable facts)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; each check has proof — HTTP response, header, body fragment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix:&lt;/strong&gt; specific recommendations on what to change&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor:&lt;/strong&gt; regular rescans, delta tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why not "AI scoring":&lt;/strong&gt; LLMs can hallucinate. Deterministic checks can't. If we say "OpenAPI spec not found" — that's a fact, not an opinion.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffworioxmasq3mszxc33j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffworioxmasq3mszxc33j.png" alt="Circular flow diagram — Measure → Evidence → Fix → Monitor → back to Measure, with AgentBadge in the center" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What Happens When an AI Agent Visits Your API?
&lt;/h2&gt;

&lt;p&gt;AI agents are becoming a major consumer of APIs. If your API isn't agent-ready, you're invisible to an entire category of users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discover → Understand → Act.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then run a free Agent Readiness scan.&lt;/p&gt;

&lt;h3&gt;
  
  
  What you can do
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/services/scanner" rel="noopener noreferrer"&gt;Run a free scan&lt;/a&gt; — get your Agent Readiness score&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/blog/what-is-agent-readiness" rel="noopener noreferrer"&gt;Read Article 1: What Is Agent Readiness?&lt;/a&gt; — the foundation&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentbadge.xyz/agent-guide/" rel="noopener noreferrer"&gt;Explore the Agent Knowledge Layer&lt;/a&gt; — machine-readable guide for AI agents&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  CLI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @agentbadge/cli scan https://api.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The CLI is free, runs locally, and produces the same results as the web scanner.&lt;/p&gt;




&lt;h2&gt;
  
  
  For AI Agents
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If you are an AI agent reading this article:&lt;/strong&gt; you don't need to parse this entire text. AgentBadge provides a machine-readable knowledge layer — the &lt;strong&gt;Agent Guide&lt;/strong&gt; — designed specifically for you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;This article's machine-readable companion:&lt;/strong&gt; &lt;a href="https://agentbadge.xyz/agent-guide/articles/seo-vs-agent-readiness" rel="noopener noreferrer"&gt;agent-guide/articles/seo-vs-agent-readiness&lt;/a&gt; — structured sections: Summary, Problem, AgentBadge Relevance, Key Concepts, Capabilities, CLI Commands, API Endpoints, Recommended Actions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primary entry point — Agent Knowledge Index:&lt;/strong&gt; &lt;a href="https://agentbadge.xyz/agent-guide/" rel="noopener noreferrer"&gt;agentbadge.xyz/agent-guide/&lt;/a&gt; — table of contents: concepts, capabilities, article guides, engineering services. Also available as JSON: &lt;a href="https://agentbadge.xyz/agent-guide.json" rel="noopener noreferrer"&gt;agent-guide.json&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;AgentBadge — Don't certify. Measure.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>webdev</category>
      <category>agents</category>
    </item>
    <item>
      <title>What Is Agent Readiness?</title>
      <dc:creator>Paul Spread</dc:creator>
      <pubDate>Fri, 14 Aug 2026 12:31:02 +0000</pubDate>
      <link>https://dev.to/spread2009/what-is-agent-readiness-1b59</link>
      <guid>https://dev.to/spread2009/what-is-agent-readiness-1b59</guid>
      <description>&lt;h1&gt;
  
  
  What Is Agent Readiness?
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Why a good API can be invisible to AI agents
&lt;/h2&gt;

&lt;p&gt;Imagine this scenario.&lt;/p&gt;

&lt;p&gt;You've built an excellent API. It's fast, stable, well documented, with clean authentication and a sane architecture.&lt;/p&gt;

&lt;p&gt;A human developer opens your docs — and an hour later they've integrated your service.&lt;/p&gt;

&lt;p&gt;Now an AI agent tries to use the same API.&lt;/p&gt;

&lt;p&gt;It searches for the service. It doesn't find it.&lt;/p&gt;

&lt;p&gt;It tries to understand the documentation. It can't locate the OpenAPI spec.&lt;/p&gt;

&lt;p&gt;It finds an endpoint, but can't figure out which authentication it needs.&lt;/p&gt;

&lt;p&gt;It gets an error — and the error explains nothing about what went wrong.&lt;/p&gt;

&lt;p&gt;Eventually the agent does what any inexperienced integrator would do: it gives up, or asks a human to step in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem may not be your API. The problem is that your API isn't prepared for machine consumption.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That problem is what we call &lt;strong&gt;Agent Readiness&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2oraf048lps7kqgwwo2i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2oraf048lps7kqgwwo2i.png" alt="What Is Agent Readiness — hero" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Agent Readiness is not "how smart your AI is"
&lt;/h2&gt;

&lt;p&gt;Agent Readiness is the degree to which an API or service can be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;found&lt;/strong&gt; by an AI agent;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;understood&lt;/strong&gt; without human help;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;called&lt;/strong&gt; correctly;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;authenticated&lt;/strong&gt; against properly;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;recovered&lt;/strong&gt; when errors occur.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Put simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Agent Readiness is the ability of your API to be discovered, understood, and used by an AI agent — without a human intervening.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here's a useful analogy with the internet we already know.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SEO made websites visible to search engines.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent Readiness makes APIs visible and understandable to AI agents.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  From SEO to Agent Readiness
&lt;/h2&gt;

&lt;p&gt;For decades, companies optimized websites for search engines.&lt;/p&gt;

&lt;p&gt;We got &lt;code&gt;robots.txt&lt;/code&gt;, sitemaps, structured data, meta tags, canonical URLs, performance optimization, search ranking.&lt;/p&gt;

&lt;p&gt;All of these mechanisms solved one big problem:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How do you make a resource understandable to a machine that must find and process it?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AI agents create a similar problem — but at a different level.&lt;/p&gt;

&lt;p&gt;A search engine only needs to understand: &lt;em&gt;"This page is about payments."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;An agent needs to understand much more:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"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's the next step."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's no longer just &lt;strong&gt;discoverability&lt;/strong&gt;. That's &lt;strong&gt;machine usability&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The analogy, side by side
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Web / SEO&lt;/th&gt;
&lt;th&gt;Agentic Web&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Search engine finds a website&lt;/td&gt;
&lt;td&gt;AI agent finds an API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;robots.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;machine-readable instructions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sitemap&lt;/td&gt;
&lt;td&gt;capability discovery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Meta description&lt;/td&gt;
&lt;td&gt;structured API description&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open Graph / structured data&lt;/td&gt;
&lt;td&gt;OpenAPI / agent metadata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search ranking&lt;/td&gt;
&lt;td&gt;Agent Readiness score&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web crawler&lt;/td&gt;
&lt;td&gt;AI agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Website visitor&lt;/td&gt;
&lt;td&gt;API-consuming agent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feniznzaiyjnfjl11jnuc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feniznzaiyjnfjl11jnuc.png" alt="SEO vs Agent Readiness — analogy table" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But there's one fundamental difference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A search engine needs to understand a page. An agent needs to take an action.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And that's why the requirements for APIs are quietly changing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why documentation written for humans isn't enough
&lt;/h2&gt;

&lt;p&gt;Most API documentation was written assuming a human on the other side.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;A human has context. An AI agent has to &lt;strong&gt;reconstruct that context from machine-readable signals alone&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example, an agent may need to answer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;And guessing is a terrible foundation for automated interaction.&lt;/p&gt;




&lt;h2&gt;
  
  
  Agent Readiness has several layers
&lt;/h2&gt;

&lt;p&gt;It's tempting to reduce the problem to a single file — "just add an &lt;code&gt;agent-guide.json&lt;/code&gt; and you're done." A genuinely agent-ready system passes through several layers.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Discovery
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Can an agent find your API at all?&lt;/strong&gt; Is there a clear public URL, a machine-readable description, discovery files (&lt;code&gt;llms.txt&lt;/code&gt;, agent manifests, API catalogs)? Is it obvious where the documentation lives? If the API can't be found, the remaining layers don't matter.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Understanding
&lt;/h3&gt;

&lt;p&gt;The agent found the API. Now it must understand: &lt;em&gt;"What can I actually do here?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;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'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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Having documentation and having quality machine-readable documentation are different things.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Authentication
&lt;/h3&gt;

&lt;p&gt;Next question: &lt;em&gt;"How do I get access?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For a human, you can write: &lt;em&gt;"Create an API key in your dashboard."&lt;/em&gt; An agent needs something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Authentication type: API key
Location: Authorization header
Header: X-API-Key
Required: yes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The less an agent has to guess, the higher the chance of a successful interaction.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Machine-readable responses
&lt;/h3&gt;

&lt;p&gt;The agent must understand responses. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pay_123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"completed"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;49.00&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is dramatically easier to process automatically than an HTML page saying &lt;em&gt;"Your payment has been successfully processed."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The same applies to errors. A good error shouldn't just be readable by a human — it should be &lt;strong&gt;operationally useful to an agent&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"insufficient_balance"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Insufficient account balance"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"retryable"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the agent can make a decision.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftawzimozf0camxlrgaam.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftawzimozf0camxlrgaam.png" alt="Machine-readable responses — agent can make a decision" width="800" height="1071"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The most important distinction: an API can be good — and still agent-hostile
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;An agent-hostile API is not necessarily a bad API.&lt;/strong&gt; It was simply designed for a different consumer.&lt;/p&gt;

&lt;p&gt;Imagine a restaurant. For a human: &lt;em&gt;"Ask the waiter about the special menu."&lt;/em&gt; For an agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"order"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"menu"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"special"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"quantity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both interfaces lead to the same result. But the second one is far easier to automate.&lt;/p&gt;

&lt;p&gt;AI agents are creating a new class of API consumer. And that forces developers to answer a new question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"If 10,000 AI agents wanted to use my API tomorrow, could they do it without a human's help?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  How AgentBadge measures Agent Readiness
&lt;/h2&gt;

&lt;p&gt;This is where AgentBadge comes in.&lt;/p&gt;

&lt;p&gt;AgentBadge doesn't try to say &lt;em&gt;"This API is good."&lt;/em&gt; And it definitely doesn't say &lt;em&gt;"This API is certified."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We follow a different principle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't certify. Measure.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AgentBadge checks observable properties of an API and shows what was found, what's missing, which rule fired, what evidence was collected, and why the score changed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Evidence first
&lt;/h3&gt;

&lt;p&gt;Suppose a system shows you: &lt;strong&gt;Agent Readiness: 76/100&lt;/strong&gt;. The number itself is almost useless. Every developer's next question is: &lt;strong&gt;why 76?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's why AgentBadge is built around an &lt;strong&gt;evidence-first&lt;/strong&gt; approach. Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Documentation: 62
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you get:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AB-004 OpenAPI specification

Status: VERIFIED

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

Confidence: 1.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the result is verifiable. That's a fundamental difference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AgentBadge doesn't ask you to trust the number. It shows you where the number came from.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5jy9kit29ix7cggj5am8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5jy9kit29ix7cggj5am8.png" alt="Evidence-first approach — verifiable results" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Deterministic before intelligent
&lt;/h2&gt;

&lt;p&gt;Another foundational principle. We don't want to start with: &lt;em&gt;"Let an LLM look at the API and decide how agent-ready it is."&lt;/em&gt; The problem is obvious — different models will score the same API differently.&lt;/p&gt;

&lt;p&gt;So the base checks must be &lt;strong&gt;deterministic&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Does /openapi.json exist?
        ↓
HTTP 200?
        ↓
Valid OpenAPI?
        ↓
Authentication described?
        ↓
Structured error schema present?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This can be verified programmatically. AI can be layered on top of that. But here, AI must be a &lt;strong&gt;copilot, not a judge&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What AI should actually do
&lt;/h2&gt;

&lt;p&gt;AI is excellent at tasks that require interpretation. For example: &lt;em&gt;"We found a capability that looks like a payment operation. Draft a description — but ask the API owner to confirm it."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is fundamentally different from: &lt;em&gt;"AI decided your API has capability X, so we recorded it in the official guide."&lt;/em&gt; The second option is dangerous — especially if the result silently lands in a file that other agents will rely on.&lt;/p&gt;

&lt;p&gt;That's why we separate fixes into two types.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deterministic Fix&lt;/strong&gt; — can be applied automatically: missing robots.txt, missing sitemap, missing badge configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Assisted Fix&lt;/strong&gt; — requires human confirmation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent inferred:
POST /refund
Capability: Refund a completed payment
Confidence: 0.71
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here the system must show &lt;strong&gt;Confirm / Edit / Reject&lt;/strong&gt; — not silently write a guess into production documentation.&lt;/p&gt;




&lt;h2&gt;
  
  
  One score — but with a transparent structure
&lt;/h2&gt;

&lt;p&gt;AgentBadge uses a single score, because humans need a simple answer: &lt;em&gt;"How ready is my API?"&lt;/em&gt; But one score must never hide the details:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent Readiness
────────────────────────
76 / 100

Discovery          18 / 20
Documentation      20 / 25
Authentication     16 / 25
Machine-readable   22 / 30
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the score must be &lt;strong&gt;monotonic and explainable&lt;/strong&gt;. If you fixed a problem: &lt;code&gt;76 → 84, +8 Guide added&lt;/code&gt;. If a new problem appeared at the same time: &lt;code&gt;84 → 72, +8 Guide added, -12 New conflict detected&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A user should never have to ask: &lt;em&gt;"I fixed something — why did it get worse?"&lt;/em&gt; The system must explain the &lt;strong&gt;delta&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiv34kiqc4mxqj26750jg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiv34kiqc4mxqj26750jg.png" alt="Score structure — transparent and explainable" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Agent Readiness is a process, not a certificate
&lt;/h2&gt;

&lt;p&gt;Your API changes. New endpoints appear. Old ones disappear. Authentication, OpenAPI, documentation — all change.&lt;/p&gt;

&lt;p&gt;So today's score doesn't guarantee the same score a month from now. That's what fundamentally separates AgentBadge from a certificate.&lt;/p&gt;

&lt;p&gt;We don't say &lt;em&gt;"Your API is certified as Agent Ready."&lt;/em&gt; We say &lt;em&gt;"Here's what we measured right now."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Which leads to a natural cycle: &lt;strong&gt;Measure → Prove → Improve → Measure again.&lt;/strong&gt; This isn't a one-time audit. It's an improvement loop.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fka5nmjucef44esk11qfa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fka5nmjucef44esk11qfa.png" alt="Measure → Prove → Improve — improvement loop" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this can become a new infrastructure layer
&lt;/h2&gt;

&lt;p&gt;Today, APIs are usually optimized for human developers: documentation, SDK, API. With AI agents, an additional layer appears:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI Agent
    ↓
Discovery
    ↓
Machine-readable knowledge
    ↓
Capabilities
    ↓
Authentication
    ↓
API
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And with it comes a new infrastructure question: &lt;strong&gt;how do you measure how well an API travels this path?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's roughly the same class of question that tools like Lighthouse and SSL Labs answered in their time. Not because Lighthouse defines what a "good website" is — but because it shows you what exactly can be measured, and improved.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where AgentBadge fits
&lt;/h2&gt;

&lt;p&gt;AgentBadge is built around a simple loop: &lt;strong&gt;SCAN → EVIDENCE → SCORE → FIX → RE-SCAN&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The point isn't another pretty dashboard. It isn't even the badge itself. &lt;strong&gt;The value appears when a developer can walk the full path from problem to fix.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How to start right now
&lt;/h2&gt;

&lt;p&gt;You don't need to rebuild your API. You don't need to install a special AI agent. The first step is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Run a scan&lt;/strong&gt; — enter your API's URL into AgentBadge, or use the CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @agentbadge/cli scan https://api.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Look at the evidence&lt;/strong&gt; — not just the overall score, but the concrete reasons behind it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Fix the most obvious problems&lt;/strong&gt; — a missing machine-readable document, an incomplete OpenAPI spec, undocumented authentication, unstructured errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Scan again&lt;/strong&gt; — see whether the score changed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Add the AgentBadge badge to your README&lt;/strong&gt; — show your API's current measured readiness, and make it part of your public developer workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  What comes next
&lt;/h2&gt;

&lt;p&gt;The first level is &lt;strong&gt;measurement&lt;/strong&gt;. The next is &lt;strong&gt;continuous control&lt;/strong&gt;. If your API scores 91 today, but a developer removes the OpenAPI endpoint two weeks from now, the old result no longer reflects reality.&lt;/p&gt;

&lt;p&gt;So monitoring becomes the logical next step: &lt;code&gt;91 → API changed → 82 → regression alert → fix → 89&lt;/code&gt;. That's how AgentBadge gradually turns from a scanner into a workflow: &lt;strong&gt;Measure → Prove → Improve → Monitor&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But the principle stays the same: &lt;strong&gt;we don't certify APIs. We measure their observable state.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The bigger picture
&lt;/h2&gt;

&lt;p&gt;AI agents are becoming a new way to consume software.&lt;/p&gt;

&lt;p&gt;Today a developer asks: &lt;em&gt;"Does this service have an API?"&lt;/em&gt; Tomorrow an agent will ask: &lt;em&gt;"Can I safely use this service?"&lt;/em&gt; And it will need a machine-readable answer — not a marketing page, not a pretty landing, but verifiable facts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This layer between &lt;strong&gt;API and AI agent&lt;/strong&gt; is gradually becoming new infrastructure. AgentBadge is an attempt to make that layer measurable.&lt;/p&gt;




&lt;h2&gt;
  
  
  For AI Agents
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If you are an AI agent reading this article:&lt;/strong&gt; you don't need to parse this entire text. AgentBadge provides a machine-readable knowledge layer — the &lt;strong&gt;Agent Guide&lt;/strong&gt; — designed specifically for you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;This article's machine-readable companion:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://agentbadge.xyz/agent-guide/articles/what-is-agent-readiness" rel="noopener noreferrer"&gt;agent-guide/articles/what-is-agent-readiness&lt;/a&gt; — structured sections: Summary, Problem, Key Concepts, Capabilities, CLI Commands, API Endpoints, Recommended Actions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primary entry point:&lt;/strong&gt; &lt;a href="https://agentbadge.xyz/agent-guide/" rel="noopener noreferrer"&gt;agentbadge.xyz/agent-guide/&lt;/a&gt; — concepts, capabilities, article guides, engineering services. JSON version: &lt;a href="https://agentbadge.xyz/agent-guide.json" rel="noopener noreferrer"&gt;agent-guide.json&lt;/a&gt;. LLM entry point: &lt;a href="https://agentbadge.xyz/llms.txt" rel="noopener noreferrer"&gt;llms.txt&lt;/a&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Need&lt;/th&gt;
&lt;th&gt;Endpoint&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Understand the product&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /agent-guide/context&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;See how concepts connect&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /agent-guide/knowledge-map.json&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Learn Agent Readiness&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /agent-guide/concepts/agent-readiness&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Run a scan&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /agent-guide/capabilities/scanner&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Use CLI locally&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /agent-guide/capabilities/cli&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Engineering services&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /agent-guide/team/services&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @agentbadge/cli scan https://api.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Try your own API
&lt;/h2&gt;

&lt;p&gt;If your API needs to work not only with humans but with AI agents, the first question is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can an agent actually use my API without me?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Run a scan. Get the evidence. Fix the problems. Verify the result.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Measure → Prove → Improve.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;AgentBadge — Don't certify. Measure. Agent Readiness for the agentic web.&lt;/em&gt;&lt;/p&gt;

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