{
  "version": "0.1.0",
  "rubricVersion": "0.7",
  "target": "https://stripe.com",
  "host": "stripe.com",
  "https": true,
  "scannedAt": "2026-10-12T22:54:50.728Z",
  "durationMs": 10380,
  "requests": 138,
  "score": 34.9,
  "grade": "BB",
  "gradeLabel": "thin",
  "previous": {
    "score": 34.9,
    "grade": "BB",
    "level": 1,
    "fingerprint": "e3ff6c7b07fdf13092aea36e6e42f37ed4b907a54edbc48fb78ca7511de3e48b",
    "scannedAt": "2026-10-12T22:51:16.573Z",
    "counts": {
      "pass": 11,
      "warn": 10,
      "fail": 30,
      "na": 10,
      "total": 61
    },
    "rubricVersion": "0.7"
  },
  "level": 1,
  "levelName": "Basic Web Presence",
  "levelBlurb": "The site is reachable, but there are no agent-specific signals.",
  "verdict": "Basic Web Presence",
  "tiers": {
    "essential": {
      "score": 29.88444444444445,
      "pool": 80,
      "counted": 16,
      "total": 16
    },
    "recommended": {
      "score": 5.410317460317461,
      "pool": 20,
      "counted": 20,
      "total": 28
    },
    "emerging": {
      "score": 1.3312500000000005,
      "pool": 5,
      "counted": 15,
      "total": 17
    }
  },
  "confidence": 99,
  "confidenceLabel": "high",
  "fingerprint": "e3ff6c7b07fdf13092aea36e6e42f37ed4b907a54edbc48fb78ca7511de3e48b",
  "isCommerce": true,
  "commerceSignals": [
    "commerce path (/products)"
  ],
  "blocked": null,
  "blockedNote": null,
  "deadline": {
    "ms": 60000,
    "reached": false
  },
  "profile": {
    "id": "general",
    "identified": false,
    "declared": false,
    "ambiguous": [
      "api",
      "saas"
    ],
    "evidence": [
      "Two profiles are too close to separate: api (4) and saas (4), margin 0 < 2.",
      "Profile-scoped checks were not scored rather than guessed at."
    ],
    "scores": [
      {
        "id": "api",
        "score": 4,
        "signals": [
          "A documentation path responds",
          "API reference copy"
        ]
      },
      {
        "id": "saas",
        "score": 4,
        "signals": [
          "A pricing page responds",
          "A documentation path responds"
        ]
      },
      {
        "id": "marketplace",
        "score": 3,
        "signals": [
          "Describes itself as a marketplace"
        ]
      },
      {
        "id": "services",
        "score": 2,
        "signals": [
          "A contact path responds",
          "A pricing path responds"
        ]
      },
      {
        "id": "ecommerce",
        "score": 1,
        "signals": [
          "A product listing path responds"
        ]
      }
    ]
  },
  "categories": [
    {
      "id": "protocol",
      "label": "Protocol Discovery",
      "weight": 0.25,
      "score": 16.7,
      "counted": true,
      "pass": 1,
      "warn": 4,
      "fail": 9,
      "na": 3,
      "total": 17
    },
    {
      "id": "content",
      "label": "Content Accessibility",
      "weight": 0.22,
      "score": 54.5,
      "counted": true,
      "pass": 6,
      "warn": 1,
      "fail": 5,
      "na": 3,
      "total": 15
    },
    {
      "id": "discoverability",
      "label": "Discoverability",
      "weight": 0.2,
      "score": 40.9,
      "counted": true,
      "pass": 3,
      "warn": 1,
      "fail": 7,
      "na": 0,
      "total": 11
    },
    {
      "id": "botaccess",
      "label": "Bot Access Control",
      "weight": 0.18,
      "score": 17.9,
      "counted": true,
      "pass": 1,
      "warn": 2,
      "fail": 5,
      "na": 0,
      "total": 8
    },
    {
      "id": "commerce",
      "label": "Commerce Protocols",
      "weight": 0.15,
      "score": 21.7,
      "counted": true,
      "pass": 0,
      "warn": 2,
      "fail": 4,
      "na": 4,
      "total": 10
    }
  ],
  "checks": [
    {
      "id": "reachable",
      "category": "discoverability",
      "tier": "essential",
      "weight": 3,
      "impact": "critical",
      "conditional": false,
      "label": "Homepage open to agent access",
      "why": "If an agent cannot read your site, every other check is moot. Cloudflare began blocking AI crawlers by default in 2025, with signed agents routed separately.",
      "skill": "agent-access",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "HTTP 200 text/html; charset=utf-8 with 704020 bytes and 1892 words of visible text.",
      "evidence": "HTTP 200 · text/html; charset=utf-8 · 704020 bytes · 413 ms · final https://stripe.com/en-pl",
      "fix": null
    },
    {
      "id": "robots-txt",
      "category": "discoverability",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "robots.txt with agent directives",
      "why": "The front door for agent traffic (RFC 9309).",
      "skill": "robots-txt",
      "standards": [
        "RFC 9309"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "3 groups, 21 rules, 2 named agent groups (ia_archiver, rogerbot), Sitemap declared.",
      "evidence": "HTTP 200 · text/plain; charset=utf-8 · 643 bytes · 297 ms · Sitemap: https://stripe.com/sitemap/sitemap.xml User-agent: ia_archiver Allow: /docs/api Allow: /docs/api$ Disallow: /docs Disallow: /docs$…",
      "fix": null
    },
    {
      "id": "sitemap-xml",
      "category": "discoverability",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "sitemap.xml valid and current",
      "why": "The primary URL discovery source for agent crawlers.",
      "skill": "sitemap",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "sitemap.xml answered HTTP 404 with 370299 bytes.",
      "evidence": "HTTP 404 · text/html; charset=utf-8 · 370299 bytes · 347 ms",
      "fix": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n  <url>\n    <loc>https://example.com/</loc>\n    <lastmod>2026-01-15</lastmod>\n  </url>\n  <url>\n    <loc>https://example.com/docs/quickstart</loc>\n    <lastmod>2026-01-15</lastmod>\n  </url>\n</urlset>"
    },
    {
      "id": "llms-txt",
      "category": "discoverability",
      "tier": "essential",
      "weight": 3,
      "impact": "critical",
      "conditional": false,
      "label": "/llms.txt published and well-structured",
      "why": "The most widely adopted contract for making a site legible to agents. In the curated corpus we measured, 46% of sites published one and the average quality score was 37 out of 100 — adoption is not the same as usefulness.",
      "skill": "llms-txt",
      "standards": [
        "llmstxt.org"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "H1 \"Stripe\", blockquote summary, 31 H2 sections with 308 markdown links, 69923 bytes. The scan requested 7 links it names, and each answered 2xx. Not requested: 36 links on another origin and 264 same-origin links (the scan samples up to 6).",
      "evidence": "HTTP 200 · text/plain; charset=utf-8 · 69923 bytes · 341 ms · headings: Stripe | Payments | Connect | Payment Links | Checkout | Elements | Billing | Invoicing | Tax | Atlas | Terminal | Rada…",
      "fix": null
    },
    {
      "id": "link-headers",
      "category": "discoverability",
      "tier": "emerging",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Discovery via Link response headers",
      "why": "RFC 8288 Link headers let an agent find your discovery resources without parsing HTML.",
      "skill": "link-headers",
      "standards": [
        "RFC 8288"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No Link header on the homepage response (HTTP 200, 704020 bytes).",
      "evidence": "HTTP 200 · text/html; charset=utf-8 · 704020 bytes · 413 ms · final https://stripe.com/en-pl",
      "fix": "# nginx: advertise discovery resources on the homepage response.\nadd_header Link '</llms.txt>; rel=\"describedby\"; type=\"text/plain\", </sitemap.xml>; rel=\"alternate\"; type=\"application/xml\"' always;\n\n# Raw header, one comma-separated field:\nLink: </llms.txt>; rel=\"describedby\"; type=\"text/plain\", </sitemap.xml>; rel=\"alternate\"; type=\"application/xml\""
    },
    {
      "id": "dns-aid",
      "category": "discoverability",
      "tier": "emerging",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "DNS-AID discovery record",
      "why": "Lets agents read discovery information over DNS without an HTTP round trip. Cloudflare added it to its readiness checklist.",
      "skill": "dns-aid",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "0 SVCB records and 0 TXT records resolve at _index._agents.stripe.com and _agent.stripe.com.",
      "evidence": "DNS-AID names queried for SVCB and TXT records: _index._agents.stripe.com and _agent.stripe.com",
      "fix": "; DNS-AID (draft-mozleywilliams-dnsop-dnsaid)\n_index._agents.example.com. 3600 IN SVCB 1 agent-index.example.com (\n    alpn=\"h2\"\n    port=443\n    well-known=agent-card.json\n)\n\nassistant.example.com. 3600 IN SVCB 1 . (\n    alpn=\"mcp,h2\"\n    port=443\n    well-known=agent-card.json\n    cap=https://example.com/.well-known/agent-card.json\n)"
    },
    {
      "id": "canonical",
      "category": "discoverability",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Canonical and hreflang discipline",
      "why": "An agent needs one consistent URL per important page.",
      "skill": "canonical",
      "standards": [],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "Canonical points at /en-pl, not the homepage URL that was reached (/).",
      "evidence": "https://stripe.com/en-pl",
      "fix": "<link rel=\"canonical\" href=\"https://example.com/\">\n<link rel=\"alternate\" hreflang=\"en\" href=\"https://example.com/\">\n<link rel=\"alternate\" hreflang=\"de\" href=\"https://example.com/de/\">\n<link rel=\"alternate\" hreflang=\"x-default\" href=\"https://example.com/\">"
    },
    {
      "id": "llms-full",
      "category": "discoverability",
      "tier": "recommended",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "/llms-full.txt expanded context",
      "why": "Lets an agent take in the full context in a single request instead of walking the site step by step.",
      "skill": "llms-full-txt",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "Not published (HTTP 404) and not linked from /llms.txt.",
      "evidence": "HTTP 404 · text/html; charset=utf-8 · 370299 bytes · 343 ms",
      "fix": "# In /llms.txt, under Docs:\n- [Full context](https://example.com/llms-full.txt): Every key page as one document\n\n# /llms-full.txt\n# Example Inc - full context\n\n> Complete text of the pages an agent needs, in a single request. Regenerated on deploy.\n\n## https://example.com/ (Home)\n\nExample Inc runs a payments API for marketplaces. Production traffic is served from three regions.\n\n## https://example.com/pricing (Pricing)\n\nStarter is $0 for 1,000 calls per month. Growth is $99 for 100,000 calls."
    },
    {
      "id": "agents-md",
      "category": "discoverability",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "AGENTS.md with the required sections",
      "why": "The instruction file for coding and operations agents. It fails more often than any other check in the curated corpus we measured, and the usual reason is not a missing file but a file without the sections an agent needs.",
      "skill": "agents-md",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "Not found (HTTP 404, 370299 bytes).",
      "evidence": "HTTP 404 · text/html; charset=utf-8 · 370299 bytes · 219 ms",
      "fix": "# AGENTS.md\n\n## Project overview\nExample Inc is a payments API for marketplaces. Docs: https://example.com/docs\n\n## Setup and build\n- `pnpm install`\n- `pnpm dev` -> http://localhost:3000\n- `pnpm build`\n\n## Testing\n- `pnpm test`; lint and types: `pnpm lint && pnpm typecheck`\n\n## Conventions\n- TypeScript strict mode; no `any` in exported signatures.\n- Public API routes live in `src/routes/api/`.\n\n## Security and contact\n- Never commit secrets; use `.env.local`.\n- Report vulnerabilities to security@example.com."
    },
    {
      "id": "sitemap-md",
      "category": "discoverability",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "/sitemap.md markdown site map",
      "why": "Lets an agent read your site structure as markdown in a single file. Adoption is still very low, so this is an early-mover advantage.",
      "skill": "sitemap-md",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "Not found (HTTP 404, 370299 bytes).",
      "evidence": "HTTP 404 · text/html; charset=utf-8 · 370299 bytes · 207 ms",
      "fix": "# Sitemap\n\n- [Home](https://example.com/): What Example Inc does and who it is for\n- [Quickstart](https://example.com/docs/quickstart): First API call in five minutes\n- [API reference](https://example.com/docs/api): Every endpoint and response field\n- [Pricing](https://example.com/pricing): Plans, limits and overage rates\n- [Status](https://example.com/status): Live service status and incident history\n- [Contact](https://example.com/contact): Sales and support routes"
    },
    {
      "id": "markdown-negotiation",
      "category": "content",
      "tier": "recommended",
      "weight": 3,
      "impact": "critical",
      "conditional": false,
      "label": "Markdown content negotiation",
      "why": "Agents can request a markup-free version with \"Accept: text/markdown\", which cuts token cost.",
      "skill": "markdown-negotiation",
      "standards": [
        "RFC 9110"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "The homepage answered Accept: text/markdown with Content-Type text/html; charset=utf-8 (HTTP 200), so the HTML document is served to every client.",
      "evidence": "status: 200; content-type: text/html; charset=utf-8; vary: accept-encoding; markdown body: no",
      "fix": "// server.js - one URL, two representations (RFC 9110).\nimport express from 'express';\nimport { readFile } from 'node:fs/promises';\n\nconst app = express();\napp.use(async (req, res, next) => {\n  if (req.method !== 'GET') return next();\n  res.vary('Accept'); // the HTML response must carry this too\n  if (req.accepts(['text/html', 'text/markdown']) !== 'text/markdown') return next();\n  try {\n    const file = `public${req.path.replace(/\\/$/, '/index')}.md`;\n    res.type('text/markdown').send(await readFile(file, 'utf8'));\n  } catch {\n    next(); // no markdown twin for this path: fall back to HTML\n  }\n});\napp.use(express.static('public'));\napp.listen(3000);"
    },
    {
      "id": "headings",
      "category": "content",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Semantic heading structure",
      "why": "A single H1 and a consistent H2 structure let the content be split correctly.",
      "skill": "semantic-headings",
      "standards": [
        "WCAG 2.2"
      ],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "2 H1 elements on one page while the rest of the outline (5 H2s, 25 H3s) is well formed.",
      "evidence": "outline: H1 H1 H2 H3 H3 H3 H3 H3 H3 H2 H2 H3 H3 H3 H3 H3 H4 H4 H4 H3 H4 H4 H4 H4 H4 H4 H4 H4 H4 H4 H3 H4 H4 H4 H2 H3 H3 H4 H4 H4 H3 H4 H4 H4 H2 H3 H3 H3 H3 H3 H3 H3 H3 H3 H4 H4 H4",
      "fix": "<main>\n  <h1>Agent readiness for e-commerce teams</h1>\n  <p>A five-dimension audit of how well a store serves autonomous AI agents.</p>\n\n  <section>\n    <h2>What we measure</h2>\n    <p>Discovery, content, bot access, protocol and commerce signals.</p>\n\n    <h3>Structured data</h3>\n    <p>Entity types an agent can quote without having to guess.</p>\n  </section>\n\n  <section>\n    <h2>How the score works</h2>\n    <p>Fifty-two weighted checks, graded from C to AAA.</p>\n  </section>\n</main>"
    },
    {
      "id": "meta",
      "category": "content",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Title and summary metadata",
      "why": "This is how an agent learns what a page is about without opening it.",
      "skill": "page-metadata",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "Title is 54 characters (band 50-60) and description is 148 characters (band 120-160).",
      "evidence": "title(54): Stripe | Financial Infrastructure to Grow Your Revenue | description(148): Stripe is a financial services platform that helps all types of businesses accept payments, build flexible billing models and manage money movement.",
      "fix": null
    },
    {
      "id": "jsonld",
      "category": "content",
      "tier": "essential",
      "weight": 3,
      "impact": "critical",
      "conditional": false,
      "label": "JSON-LD structured data",
      "why": "The entity type becomes unambiguous to a machine. Without authoritative data, an agent answers from whatever it can scrape.",
      "skill": "structured-data",
      "standards": [
        "schema.org"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "1 JSON-LD block parsed with a schema.org @context declaring WebSite (7 @types in total).",
      "evidence": "blocks: 1 total, 1 non-empty, 1 parsed; schema.org @context: yes; @types: WebSite, Organization, Person, ImageObject, ContactPoint, Place, PostalAddress",
      "fix": null
    },
    {
      "id": "faq-schema",
      "category": "content",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "FAQ / question-answer schema",
      "why": "Question-and-answer content is the type agents quote most.",
      "skill": "faq-schema",
      "standards": [
        "schema.org/FAQPage"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No FAQPage entity among 1 parsed JSON-LD block on the homepage.",
      "evidence": "@types: WebSite, Organization, Person, ImageObject, ContactPoint, Place, PostalAddress",
      "fix": "<script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What does an agent readiness audit measure?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Fifty-two checks across discovery, content, bot access, protocol and commerce, each scored and paired with a fix.\"\n      }\n    }\n  ]\n}\n</script>"
    },
    {
      "id": "breadcrumb",
      "category": "content",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "Breadcrumb / navigation schema",
      "why": "Helps an agent make sense of where a page sits in your site.",
      "skill": "breadcrumb-schema",
      "standards": [
        "schema.org/BreadcrumbList"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No BreadcrumbList entity among 1 parsed JSON-LD block on the homepage.",
      "evidence": "@types: WebSite, Organization, Person, ImageObject, ContactPoint, Place, PostalAddress",
      "fix": "<script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"BreadcrumbList\",\n  \"itemListElement\": [\n    { \"@type\": \"ListItem\", \"position\": 1, \"name\": \"Home\", \"item\": \"https://www.example.com/\" },\n    { \"@type\": \"ListItem\", \"position\": 2, \"name\": \"Checks\", \"item\": \"https://www.example.com/checks\" },\n    { \"@type\": \"ListItem\", \"position\": 3, \"name\": \"Structured data\", \"item\": \"https://www.example.com/checks/jsonld\" }\n  ]\n}\n</script>"
    },
    {
      "id": "summary",
      "category": "content",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Prominent summary block",
      "why": "The llms.txt contract recommends a short summary at the top of every page; agents quote it directly.",
      "skill": "page-summary",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "The first 1000 characters of main content hold no paragraph or summary block (11378 characters of main text).",
      "evidence": "Global GDP running on Stripe: Financial infrastructure to grow your revenue. Accept payments, offer financial services and implement custom revenue models – from your first transaction to your billion",
      "fix": "<main>\n  <h1>Token efficiency for agent-readable pages</h1>\n  <p class=\"summary\">\n    Content-to-markup ratio is the share of a page's bytes an agent can read: below 15% most of the\n    HTML is scaffolding, and every wrapper div is billed to someone's context window.\n  </p>\n  <h2>How the ratio is measured</h2>\n  <p>Script, style and template blocks are removed, the remaining tags are stripped, and the visible\n  characters are divided by the raw HTML size.</p>\n</main>"
    },
    {
      "id": "lang",
      "category": "content",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Language declaration and multilingual access",
      "why": "A wrong language tag makes an agent misread the content.",
      "skill": "language-declaration",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "html lang=\"en-PL\" with 89 hreflang alternates, all with absolute hrefs plus a self-reference and x-default.",
      "evidence": "html lang=\"en-PL\"; alternates: x-default -> https://stripe.com/, en-us -> https://stripe.com/, es-us -> https://stripe.com/es-us, zh-us -> https://stripe.com/zh-us, en-ae -> https://stripe.com/ae, de-at -> https://stripe.com/at, en-at -> https://stripe.com/en-at, en-au -> https://stripe.com/au, nl-be -> https://stripe.com/nl-be, fr-be -> https://stripe.com/fr-be, de-be -> http…",
      "fix": null
    },
    {
      "id": "no-js-fallback",
      "category": "content",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Content that needs no JavaScript",
      "why": "If content is only produced client-side, the page is empty for agents that do not run JavaScript.",
      "skill": "server-rendering",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "12911 characters of static text and 2 H1s are in the HTML before any JavaScript runs.",
      "evidence": "static characters: 12911; H1 in static HTML: 2; characters inside noscript: 0; markup characters: 702748",
      "fix": null
    },
    {
      "id": "spa-fallback",
      "category": "content",
      "tier": "emerging",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Per-page content separation (no SPA fallback)",
      "why": "A catch-all route returning the same skeleton for every URL makes pages indistinguishable to an agent.",
      "skill": "server-rendering",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "Homepage and /about ship different titles (\"Stripe | Financial Infrastructure to Gr…\" vs \"About Us | Stripe\") and different main text (12% word overlap).",
      "evidence": "compared / vs /about; titles \"Stripe | Financial Infrastructure to Grow Your Re…\" / \"About Us | Stripe\"; skeleton 24%; main-text word overlap 12%; main text 2070 characters",
      "fix": null
    },
    {
      "id": "token-efficiency",
      "category": "content",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Token efficiency (content-to-markup ratio)",
      "why": "A bloated DOM wastes an agent's context window.",
      "skill": "token-efficiency",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "Content-to-markup ratio 1.8% (12911 visible of 702748 markup characters, ~2554 tokens), below the 8% floor where markup outweighs the content.",
      "evidence": "visible characters: 12911; markup characters: 702748; words: 1892; estimated tokens: 2554",
      "fix": "// scripts/tighten-html.mjs - run after the build over every emitted page.\nimport { readdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { minify } from 'html-minifier-terser';\n\nconst pages = readdirSync('dist', { recursive: true, encoding: 'utf8' }).filter((p) => p.endsWith('.html'));\n\nfor (const page of pages) {\n  const file = `dist/${page}`;\n  const before = readFileSync(file, 'utf8');\n  const after = await minify(before, {\n    collapseWhitespace: true,\n    removeComments: true,\n    removeRedundantAttributes: true,\n    minifyCSS: true,\n    minifyJS: true,\n  });\n  writeFileSync(file, after);\n}"
    },
    {
      "id": "viewport",
      "category": "content",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "Responsive markup",
      "why": "Agent browsers mostly run at mobile scale.",
      "skill": "responsive-markup",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "viewport content \"width=device-width, initial-scale=1, viewport-fit=cover\" sets width=device-width and leaves zoom unrestricted.",
      "evidence": "viewport meta: width=device-width, initial-scale=1, viewport-fit=cover; media queries on the page: 0",
      "fix": null
    },
    {
      "id": "webbotauth",
      "category": "botaccess",
      "tier": "essential",
      "weight": 3,
      "impact": "critical",
      "conditional": false,
      "label": "Web Bot Auth key directory",
      "why": "RFC 9421 with Ed25519: the mechanism that lets a site verify which agent is calling rather than guessing from a user-agent string. Adoption in the curated corpus we measured is around one site in a hundred.",
      "skill": "web-bot-auth",
      "standards": [
        "RFC 9421"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "/.well-known/http-message-signatures-directory answered HTTP 404, not a JWK Set.",
      "evidence": "<!DOCTYPE html> <html class=\"MktRoot\" lang=\"en-US\" data-js-controller=\"Page\" data-page-id=\"Not found\" data-page-title=\"Page not found\" data-loading > <head> <script>window.__capturedErrors = []; window.onerror = functio…",
      "fix": null
    },
    {
      "id": "agent-permissions",
      "category": "botaccess",
      "tier": "essential",
      "weight": 3,
      "impact": "critical",
      "conditional": false,
      "label": "Agent permission model (agent-permissions.json)",
      "why": "Declares which actions an agent may take, which are refused, and which need a person. It is the difference between a policy and a wish: in the curated corpus we measured, roughly one site in a hundred publishes one.",
      "skill": "agent-permissions",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "Neither path served a permission document (/.well-known/agent-permissions.json HTTP 404, /agent-permissions.json HTTP 404).",
      "evidence": null,
      "fix": null
    },
    {
      "id": "ai-rules",
      "category": "botaccess",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Named AI bot rules in robots.txt",
      "why": "Naming agent crawlers explicitly is the first step to being visible in agent traffic.",
      "skill": "ai-rules",
      "standards": [
        "RFC 9309"
      ],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "0 of 18 named AI bots addressed: the only 10 robots.txt rules sit in the User-agent: * group.",
      "evidence": "Sitemap: https://stripe.com/sitemap/sitemap.xml User-agent: ia_archiver Allow: /docs/api Allow: /docs/api$ Disallow: /docs Disallow: /docs$ Disallow: /bitcoin/refund Disallow: /sources/refund Disallow: /sources/sepa_mandate Disallow: /sour…",
      "fix": "# robots.txt - named AI agents, each with a rule of its own.\nUser-agent: OAI-SearchBot\nAllow: /\nUser-agent: ChatGPT-User\nAllow: /\nUser-agent: Claude-User\nAllow: /\nUser-agent: PerplexityBot\nAllow: /\nUser-agent: GPTBot\nDisallow: /\nUser-agent: CCBot\nDisallow: /\nUser-agent: *\nAllow: /\nSitemap: https://example.com/sitemap.xml"
    },
    {
      "id": "content-signal",
      "category": "discoverability",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Content-Signal usage signals",
      "why": "Declares how your content may be used, inside robots.txt. Cloudflare included this in its readiness checks.",
      "skill": "content-signals",
      "standards": [
        "contentsignals.org"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No Content-Signal line in robots.txt (643 bytes) and none in the homepage response headers.",
      "evidence": "HTTP 200 · text/plain; charset=utf-8 · 643 bytes · 297 ms",
      "fix": "# https://example.com/robots.txt - Content Signals Policy (contentsignals.org)\n# search   = index the content and return links and short excerpts\n# ai-input = use the content in a model at answer time (grounding)\n# ai-train = use the content to train or fine-tune a model\n\nUser-agent: *\nContent-Signal: search=yes, ai-input=yes, ai-train=no\nAllow: /\n\nUser-agent: GPTBot\nContent-Signal: search=yes, ai-input=yes, ai-train=no\nAllow: /"
    },
    {
      "id": "ai-policy",
      "category": "botaccess",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "AI usage policy page",
      "why": "States the rules agents must follow and reduces licensing ambiguity.",
      "skill": "ai-policy",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No AI policy page found: 0 of 7 candidate paths served a policy page and the home page links to none.",
      "evidence": null,
      "fix": "<!doctype html>\n<html lang=\"en\">\n<head><meta charset=\"utf-8\"><title>AI usage policy</title></head>\n<body>\n  <h1>AI usage policy</h1>\n  <h2>Permitted</h2>\n  <p>Indexing, retrieval and citation by identified search and answer engines.</p>\n  <h2>Not permitted</h2>\n  <p>Do not train, fine-tune or distil a model on this content; no bulk scraping or resale.</p>\n  <h2>Contact</h2>\n  <p><a href=\"mailto:agents@example.com\">agents@example.com</a></p>\n</body>\n</html>"
    },
    {
      "id": "bot-page",
      "category": "botaccess",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Crawler and agent policy page",
      "why": "Explains which agents are permitted and how they are verified.",
      "skill": "bot-policy",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No bot or agent policy page found: 0 of 7 candidate paths served one and the home page links to none.",
      "evidence": null,
      "fix": "<!doctype html>\n<html lang=\"en\">\n<head><meta charset=\"utf-8\"><title>Bot policy</title></head>\n<body>\n<h1>Bot and agent policy</h1>\n<h2>Welcome</h2>\n<p>Identified search and answer engines that cite the source.</p>\n<h2>Refused</h2>\n<p>Training crawlers, spoofed User-Agents, clients that ignore robots.txt.</p>\n<h2>How we verify identity</h2>\n<p>Signed requests are checked against our key directory at /.well-known/http-message-signatures-directory; unsigned clients by published IP ranges.</p>\n<h2>Contact</h2>\n<p><a href=\"mailto:agents@example.com\">agents@example.com</a></p>\n</body>\n</html>"
    },
    {
      "id": "security-txt",
      "category": "botaccess",
      "tier": "recommended",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "security.txt (RFC 9116)",
      "why": "Provides a responsible disclosure channel for agent-related security incidents.",
      "skill": "security-txt",
      "standards": [
        "RFC 9116"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "security.txt at /.well-known/security.txt declares 1 Contact and an Expires 2026-12-31T23:59:00.000Z in the future. Not scored: its Policy URL is on hackerone.com, which this scan does not request.",
      "evidence": "Contact: https://hackerone.com/stripe Expires: 2026-12-31T23:59:00.000Z Acknowledgments: https://hackerone.com/stripe/thanks Preferred-Languages: en Canonical: https://stripe.com/.well-known/security.txt Policy: https://hackerone.com/stripe#overview Hiring: h…",
      "fix": null
    },
    {
      "id": "crawl-delay",
      "category": "botaccess",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "Crawl rate declaration",
      "why": "Cloudflare's Verified Bots policy drops AI crawlers that ignore crawl-delay.",
      "skill": "crawl-delay",
      "standards": [],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "Crawl-delay: 2s appears only under User-agent: rogerbot, which names no AI crawler and no wildcard, so 0 of 1 declared Crawl-delay line applies.",
      "evidence": "Sitemap: https://stripe.com/sitemap/sitemap.xml User-agent: ia_archiver Allow: /docs/api Allow: /docs/api$ Disallow: /docs Disallow: /docs$ Disallow: /bitcoin/refund Disallow: /sources/refund Disallow: /sources/sepa_mandate Disallow: /sour…",
      "fix": "# robots.txt - a crawl rate inside the group it applies to.\nUser-agent: *\nCrawl-delay: 1\n\nUser-agent: OAI-SearchBot\nCrawl-delay: 1\n\nUser-agent: GPTBot\nCrawl-delay: 10"
    },
    {
      "id": "ai-txt",
      "category": "botaccess",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "/ai.txt access declaration",
      "why": "Some agent ecosystems read an /ai.txt contract alongside robots.txt.",
      "skill": "ai-txt",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "/ai.txt answered HTTP 404, not an access declaration.",
      "evidence": "<!DOCTYPE html> <html class=\"MktRoot\" lang=\"en-US\" data-js-controller=\"Page\" data-page-id=\"Not found\" data-page-title=\"Page not found\" data-loading > <head> <script>window.__capturedErrors = []; window.onerror = functio…",
      "fix": null
    },
    {
      "id": "mcp-card",
      "category": "protocol",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "MCP server card",
      "why": "Since MCP 2026-07-28, agents discover tool servers through a published declaration.",
      "skill": "mcp-server-card",
      "standards": [
        "MCP 2026-07-28"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No MCP server card was served as JSON at the 3 declared paths (/.well-known/mcp/server-card.json 404 text/html; /.well-known/mcp.json 404 text/html; /mcp.json 404 text/html).",
      "evidence": null,
      "fix": "{\n  \"$schema\": \"https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json\",\n  \"name\": \"com.example/weather\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Live weather and forecast data for partner agents.\",\n  \"title\": \"Example Weather\",\n  \"websiteUrl\": \"https://your-domain.example/developers\",\n  \"remotes\": [\n    {\n      \"type\": \"streamable-http\",\n      \"url\": \"https://your-domain.example/mcp\",\n      \"supportedProtocolVersions\": [\"2026-07-28\"]\n    }\n  ]\n}"
    },
    {
      "id": "openapi",
      "category": "protocol",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "OpenAPI definition",
      "why": "A machine-readable contract so an agent can discover your API and generate correct calls.",
      "skill": "openapi",
      "standards": [
        "OpenAPI 3.x"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No OpenAPI document was found: 5 candidate paths (0 advertised, 5 standard) returned no JSON OpenAPI 3.x document.",
      "evidence": "tried: /openapi.json 404 | /openapi.yaml 404 | /.well-known/openapi.json 404 | /api/openapi.json 404 | /swagger.json 404",
      "fix": "{\n  \"openapi\": \"3.1.0\",\n  \"info\": { \"title\": \"Example Public API\", \"version\": \"1.4.0\" },\n  \"servers\": [{ \"url\": \"https://api.your-domain.example/v1\" }],\n  \"paths\": {\n    \"/orders/{orderId}\": {\n      \"get\": {\n        \"operationId\": \"getOrder\",\n        \"summary\": \"Get the status of one order\",\n        \"parameters\": [{ \"name\": \"orderId\", \"in\": \"path\", \"required\": true, \"schema\": { \"type\": \"string\" } }],\n        \"responses\": { \"200\": { \"description\": \"The order\" } }\n      }\n    }\n  }\n}"
    },
    {
      "id": "oauth-discovery",
      "category": "protocol",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "OAuth discovery documents",
      "why": "Required for agents to connect to your authenticated API on their own (RFC 8414 / RFC 9728).",
      "skill": "oauth-discovery",
      "standards": [
        "RFC 8414",
        "RFC 9728"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "None of the 3 OAuth discovery paths returned a JSON document (/.well-known/oauth-authorization-server 404 text/html; /.well-known/openid-configuration 404 text/html; /.well-known/oauth-protected-resource 404 text/html).",
      "evidence": null,
      "fix": "{\n  \"resource\": \"https://api.your-domain.example/\",\n  \"resource_name\": \"Example API\",\n  \"resource_logo_uri\": \"https://your-domain.example/logo.png\",\n  \"authorization_servers\": [\"https://auth.your-domain.example/\"],\n  \"scopes_supported\": [\"api.read\", \"api.write\"],\n  \"bearer_methods_supported\": [\"header\"]\n}"
    },
    {
      "id": "api-catalog",
      "category": "protocol",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "API catalog",
      "why": "Lets an agent see which capabilities are callable in a single document (RFC 9727).",
      "skill": "api-catalog",
      "standards": [
        "RFC 9727"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No API catalog linkset was served at the 3 declared paths (/.well-known/api-catalog 404 text/html; /api-catalog.json 404 text/html; /.well-known/ai-plugin.json 404 text/html).",
      "evidence": null,
      "fix": "{\n  \"linkset\": [\n    {\n      \"anchor\": \"https://your-domain.example/apis/public_api\",\n      \"service-desc\": [\n        { \"href\": \"https://your-domain.example/openapi.json\", \"type\": \"application/json\" }\n      ],\n      \"service-doc\": [\n        { \"href\": \"https://your-domain.example/docs/\", \"type\": \"text/html\" }\n      ],\n      \"status\": [\n        { \"href\": \"https://your-domain.example/status.json\", \"type\": \"application/json\" }\n      ]\n    }\n  ]\n}"
    },
    {
      "id": "agent-skills",
      "category": "protocol",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Agent Skills declaration",
      "why": "Offers ready-made capability packages to agent runtimes.",
      "skill": "agent-skills",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No agent skills index with a non-empty skills array was served as JSON at the 3 declared paths (/.well-known/agent-skills/index.json 404 text/html; /.well-known/agent-skills.json 404 text/html; /.well-known/skills.json 404 text/html).",
      "evidence": null,
      "fix": "{\n  \"$schema\": \"https://schemas.agentskills.io/discovery/0.2.0/schema.json\",\n  \"skills\": [\n    {\n      \"name\": \"invoice-reconciliation\",\n      \"type\": \"skill-md\",\n      \"description\": \"Reconcile invoices against payments and flag unmatched line items.\",\n      \"url\": \"/.well-known/agent-skills/invoice-reconciliation/SKILL.md\",\n      \"digest\": \"sha256:9f2c1a4b7d8e0f3a5c6b1d2e4f7089a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6\"\n    }\n  ]\n}"
    },
    {
      "id": "a2a-card",
      "category": "protocol",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "A2A agent card",
      "why": "A2A v1.0 (Linux Foundation) is the emerging standard for agent-to-agent discovery. Almost no site publishes a card yet, which makes this one of the cheapest places to be early.",
      "skill": "a2a-agent-card",
      "standards": [
        "A2A v1.0"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No A2A agent card was served as JSON at the 2 declared paths (/.well-known/agent-card.json 404 text/html; /.well-known/agent.json 404 text/html).",
      "evidence": null,
      "fix": "{\n  \"name\": \"Example Support Agent\",\n  \"description\": \"Answers product and billing questions for partner agents.\",\n  \"version\": \"1.0.0\",\n  \"supportedInterfaces\": [\n    { \"url\": \"https://your-domain.example/a2a/v1\", \"protocolBinding\": \"JSONRPC\", \"protocolVersion\": \"1.0\" }\n  ],\n  \"capabilities\": { \"streaming\": true },\n  \"defaultInputModes\": [\"text/plain\"],\n  \"defaultOutputModes\": [\"text/plain\"],\n  \"skills\": [\n    {\n      \"id\": \"billing-question\",\n      \"name\": \"Billing question\",\n      \"description\": \"Answers invoice questions for one account.\",\n      \"tags\": [\"billing\"]\n    }\n  ]\n}"
    },
    {
      "id": "a2a-signed",
      "category": "protocol",
      "tier": "emerging",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Cryptographically signed agent card",
      "why": "A2A v1.0 makes identity verifiable through JWS (RFC 7515).",
      "skill": "a2a-card-signing",
      "standards": [
        "RFC 7515"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "unmeasurable",
      "detail": "No A2A agent card is published, so there are no signatures to inspect and the check is not scored.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "auth-md",
      "category": "protocol",
      "tier": "emerging",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "/auth.md agent authentication guide",
      "why": "A guide telling an agent which authentication flow to use.",
      "skill": "auth-md",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No markdown authentication guide was served at the 2 declared paths (/auth.md 404 text/html; /.well-known/auth.md 404 text/html).",
      "evidence": null,
      "fix": "# auth.md\n\nAgents authenticate here: discover, register, claim if needed, call.\n\n## Methods\n- `identity_assertion`: you hold an ID-JAG bound to this `resource`.\n- `service_auth`: you have the user's verified email; a claim follows.\n- `anonymous`: no user identity yet.\n\n## Endpoints\nGET https://api.your-domain.example/.well-known/oauth-protected-resource\nPOST `agent_auth.identity_endpoint`, then `agent_auth.claim_endpoint` when claim is\nrequired; exchange at `token_endpoint` for an access_token."
    },
    {
      "id": "webmcp",
      "category": "protocol",
      "tier": "emerging",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "WebMCP browser tool declaration",
      "why": "WebMCP lets sites expose tools to in-browser agents. It is the only normative deliverable of the W3C Agentic Web WG.",
      "skill": "webmcp",
      "standards": [
        "W3C WebMCP"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No WebMCP declaration was found: the 3 manifest paths served no tools array and the homepage contains 0 registerTool calls.",
      "evidence": null,
      "fix": "{\n  \"tools\": [\n    {\n      \"name\": \"search_products\",\n      \"title\": \"Search products\",\n      \"description\": \"Search the public catalogue by free-text query and return matching products with prices.\",\n      \"inputSchema\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"query\": { \"type\": \"string\", \"description\": \"Free-text search query\" },\n          \"limit\": { \"type\": \"integer\", \"minimum\": 1, \"maximum\": 50, \"default\": 10 }\n        },\n        \"required\": [\"query\"],\n        \"additionalProperties\": false\n      }\n    }\n  ]\n}"
    },
    {
      "id": "ard-manifest",
      "category": "protocol",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "ARD resource discovery manifest",
      "why": "Cisco/Outshift's Agentic Resource Discovery specification; Lighthouse audits it too.",
      "skill": "ard",
      "standards": [
        "ard-spec"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No ARD manifest with an entries array was served at the 4 declared paths (/.well-known/ard.json 404 text/html; /.well-known/agent-resources.json 404 text/html; /.well-known/ai-catalog.json 404 text/html; /ard.json 404 text/html; first JSON document: none).",
      "evidence": null,
      "fix": "{\n  \"entries\": [\n    {\n      \"identifier\": \"urn:air:your-domain.example:server:support\",\n      \"displayName\": \"Example Support MCP Server\",\n      \"type\": \"application/mcp-server-card+json\",\n      \"url\": \"https://your-domain.example/.well-known/mcp/server-card.json\",\n      \"description\": \"Tools for order status and returns.\"\n    }\n  ]\n}"
    },
    {
      "id": "docs",
      "category": "protocol",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Documentation reachable",
      "why": "An agent needs documentation to complete an integration on its own.",
      "skill": "documentation",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "Documentation is reachable at /en-pl/guides/best-practices-for-launching-and-scaling-platform-payments (homepage anchor) and returns HTTP 200 text/html with 4130 readable words.",
      "evidence": null,
      "fix": "<!-- Homepage <head>: tell agents where the public docs are -->\n<link rel=\"service-doc\" href=\"/docs/\" type=\"text/html\">\n\n<!-- Homepage body: a real link, so crawlers and users both find it -->\n<a href=\"/docs/\">Documentation and API reference</a>"
    },
    {
      "id": "pricing-structured",
      "category": "protocol",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Structured pricing information",
      "why": "An offer without a price cannot be compared by an agent — you drop out of consideration.",
      "skill": "pricing-schema",
      "standards": [
        "schema.org/Offer"
      ],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "No structured offer is present in the homepage JSON-LD and the only price signal is prose copy reading \"$1.9\".",
      "evidence": null,
      "fix": "{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Service\",\n  \"name\": \"Agent Readiness Audit\",\n  \"offers\": {\n    \"@type\": \"Offer\",\n    \"price\": \"490.00\",\n    \"priceCurrency\": \"USD\",\n    \"availability\": \"https://schema.org/InStock\",\n    \"priceSpecification\": {\n      \"@type\": \"UnitPriceSpecification\",\n      \"price\": \"490.00\",\n      \"priceCurrency\": \"USD\"\n    }\n  }\n}"
    },
    {
      "id": "service-schema",
      "category": "protocol",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Service/product scope machine-readable",
      "why": "An agent must be able to answer \"what does this site offer, and to whom\".",
      "skill": "service-schema",
      "standards": [],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "Homepage JSON-LD carries only 2 generic Organization or WebSite nodes across 2 model types, so what is offered and to whom is not readable.",
      "evidence": null,
      "fix": "{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Service\",\n  \"name\": \"Agent readiness audit\",\n  \"serviceType\": \"Website agent-readiness audit and remediation\",\n  \"provider\": { \"@type\": \"Organization\", \"name\": \"Example Inc.\", \"url\": \"https://your-domain.example\" },\n  \"areaServed\": [{ \"@type\": \"Country\", \"name\": \"United States\" }],\n  \"audience\": { \"@type\": \"BusinessAudience\", \"name\": \"E-commerce and SaaS teams\" }\n}"
    },
    {
      "id": "contact",
      "category": "protocol",
      "tier": "emerging",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Structured contact information",
      "why": "An agent must know where to reach you before starting a transaction, or when something fails.",
      "skill": "contact-schema",
      "standards": [
        "schema.org/Organization"
      ],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "Homepage JSON-LD declares 1 organization node with 0 contact details while the page itself carries 0 plain-text contact signals.",
      "evidence": null,
      "fix": "{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Organization\",\n  \"name\": \"Example Inc.\",\n  \"url\": \"https://your-domain.example\",\n  \"contactPoint\": [\n    {\n      \"@type\": \"ContactPoint\",\n      \"contactType\": \"technical support\",\n      \"email\": \"agents@your-domain.example\",\n      \"telephone\": \"+1-555-0100\",\n      \"availableLanguage\": [\"en\"]\n    }\n  ]\n}"
    },
    {
      "id": "status-page",
      "category": "protocol",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "Service status and changelog feed",
      "why": "An agent should be able to learn about outages and API changes in a machine-readable way.",
      "skill": "status-changelog",
      "standards": [],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "A status document is advertised at /status (HTTP 200) but the homepage advertises 0 Atom or RSS changelog feeds.",
      "evidence": null,
      "fix": "<!-- Homepage <head>: advertise machine-readable status and history -->\n<link rel=\"alternate\" type=\"application/atom+xml\" title=\"Service status\"\n      href=\"/status/feed.atom\">\n<link rel=\"alternate\" type=\"application/atom+xml\" title=\"Changelog\"\n      href=\"/changelog/feed.atom\">\n\n<!-- Homepage body: links a user (or a crawler) can follow -->\n<a href=\"/status/\">Service status</a>\n<a href=\"/changelog/\">Changelog</a>"
    },
    {
      "id": "product-schema",
      "category": "commerce",
      "tier": "essential",
      "weight": 3,
      "impact": "critical",
      "conditional": true,
      "label": "Product/catalog schema",
      "why": "Product data is the most valuable and the least machine-readable: price, availability and returns are usually rendered for a person to read and never declared for a machine to parse.",
      "skill": "product-schema",
      "standards": [
        "schema.org/Product"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No Product, Offer or AggregateOffer type appears in the homepage JSON-LD (7 types) or in the JSON-LD of the 1 readable product or collection page.",
      "evidence": "homepage @type: WebSite, Organization, Person, ImageObject, ContactPoint, Place, PostalAddress; product paths: /products HTTP 200, /shop HTTP 404, /store HTTP 404",
      "fix": "{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Product\",\n  \"name\": \"Aurora Desk Lamp\",\n  \"sku\": \"ADL-100-BLK\",\n  \"offers\": {\n    \"@type\": \"Offer\",\n    \"price\": \"1299.00\",\n    \"priceCurrency\": \"USD\",\n    \"availability\": \"https://schema.org/InStock\"\n  }\n}"
    },
    {
      "id": "payment-protocols",
      "category": "commerce",
      "tier": "recommended",
      "weight": 3,
      "impact": "high",
      "conditional": true,
      "label": "Agent payment standard support (AP2/ACP/x402/UCP)",
      "why": "The least-implemented surface in the rubric. Accepting an agent payment means choosing a standard and changing a checkout, which is a business decision most sites have not made yet.",
      "skill": "agent-payments",
      "standards": [
        "AP2",
        "ACP",
        "x402",
        "UCP"
      ],
      "status": "warn",
      "points": 0.7,
      "counted": true,
      "excluded": null,
      "detail": "Exactly one agent-payment signal (agent-purchase grant stated on /pricing); the 3 readable payment and policy pages name no second standard, manifest or agent-purchase wording.",
      "evidence": "paths read: 3/8; standards: none",
      "fix": null
    },
    {
      "id": "agent-purchase",
      "category": "commerce",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": true,
      "label": "Agent purchase policy",
      "why": "Liability is the open question in agent commerce, and it is a policy decision rather than a technical one: a site that accepts an agent purchase has to decide who carries the cost when the agent is wrong, and publish that decision where an agent can read it.",
      "skill": "agent-purchase-policy",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No page among the 5 agent policy paths carries both an agent word and a purchase word (/ai-policy HTTP 404, /agent-policy HTTP 404, /terms HTTP 200, /agentic-commerce HTTP 404, /ai HTTP 404).",
      "evidence": "readable pages: /terms",
      "fix": null
    },
    {
      "id": "ucp-manifest",
      "category": "commerce",
      "tier": "emerging",
      "weight": 2,
      "impact": "medium",
      "conditional": true,
      "label": "UCP manifest (/.well-known/ucp)",
      "why": "Google and Shopify's Universal Commerce Protocol; lets a merchant declare checkout capabilities at transaction time.",
      "skill": "ucp",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "Neither /.well-known/ucp nor /.well-known/ucp.json returned HTTP 200 (/.well-known/ucp HTTP 404, /.well-known/ucp.json HTTP 404), so no manifest was served.",
      "evidence": null,
      "fix": "{\n  \"protocol_version\": \"1.0\",\n  \"merchant\": { \"id\": \"shop.example.com\", \"name\": \"Example Shop\", \"url\": \"https://shop.example.com\" },\n  \"capabilities\": { \"catalog_search\": true, \"product_detail\": true, \"cart\": true, \"checkout\": true },\n  \"checkout\": {\n    \"endpoint\": \"https://shop.example.com/api/ucp/checkout\",\n    \"payment_handlers\": [\"ap2\", \"acp\", \"x402\"]\n  }\n}"
    },
    {
      "id": "returns",
      "category": "commerce",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": true,
      "label": "Return and shipping terms machine-readable",
      "why": "An agent must verify return terms before making a purchase decision.",
      "skill": "return-policy-schema",
      "standards": [
        "schema.org/MerchantReturnPolicy"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No return or shipping page responded (/returns HTTP 404, /shipping HTTP 404, /refund-policy HTTP 404) and the homepage JSON-LD declares neither MerchantReturnPolicy nor OfferShippingDetails.",
      "evidence": "homepage @type: WebSite, Organization",
      "fix": "{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Offer\",\n  \"hasMerchantReturnPolicy\": {\n    \"@type\": \"MerchantReturnPolicy\",\n    \"applicableCountry\": \"US\",\n    \"merchantReturnDays\": 14,\n    \"returnMethod\": \"https://schema.org/ReturnByMail\",\n    \"returnFees\": \"https://schema.org/FreeReturn\"\n  },\n  \"shippingDetails\": {\n    \"@type\": \"OfferShippingDetails\",\n    \"shippingRate\": { \"@type\": \"MonetaryAmount\", \"value\": \"49.00\", \"currency\": \"USD\" }\n  }\n}"
    },
    {
      "id": "agent-analytics",
      "category": "commerce",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": true,
      "label": "Agent traffic measurement",
      "why": "If agent traffic is not measured separately, the channel's return is invisible and never funded.",
      "skill": "agent-analytics",
      "standards": [],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "No analytics vendor signature among the 8 checked appears in the homepage source, so nothing about the agent channel can be attributed.",
      "evidence": "homepage 704020 bytes; vendors: none; markers: events.carousel.agentic, agentic commerce, and more.\",\"m…",
      "fix": null
    },
    {
      "id": "inventory-freshness",
      "category": "commerce",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Inventory and price freshness",
      "why": "An agent that cannot tell whether an item is in stock — or when a price was last valid — will quote a stale offer to a buyer, or refuse to quote at all.",
      "skill": "inventory-freshness",
      "standards": [
        "schema.org/Offer"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to ecommerce or marketplace sites, and the site type could not be confirmed (best candidates: api, saas). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "seller-identity",
      "category": "commerce",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Seller identity declared",
      "why": "On a marketplace an offer is meaningless without knowing who is selling and who is the merchant of record, because that is who the agent has a contract with.",
      "skill": "seller-identity",
      "standards": [
        "schema.org/Organization"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to ecommerce or marketplace sites, and the site type could not be confirmed (best candidates: api, saas). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "shipping-costs",
      "category": "commerce",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Shipping cost and delivery declared",
      "why": "A purchase agent that cannot compute the delivered total cannot complete a checkout, and returns to the merchant without it.",
      "skill": "shipping-costs",
      "standards": [
        "schema.org/OfferShippingDetails"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to ecommerce or marketplace sites, and the site type could not be confirmed (best candidates: api, saas). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "sandbox-environment",
      "category": "protocol",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Sandbox or test environment documented",
      "why": "An agent cannot safely integrate against a production endpoint; a documented sandbox is the difference between a working trial and a support ticket.",
      "skill": "sandbox-environment",
      "standards": [],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to saas or api sites, and the site type could not be confirmed (best candidates: api, saas). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "rate-limits-declared",
      "category": "protocol",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Rate limits and quotas documented",
      "why": "An agent that does not know the quota discovers it by being throttled, halfway through a task it cannot resume.",
      "skill": "rate-limits",
      "standards": [
        "RFC 9110"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to api sites, and the site type could not be confirmed (best candidates: api, saas). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "licensing-terms",
      "category": "content",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Reuse and licensing terms declared",
      "why": "Declaring ai-train=no without stating a licensing path leaves both the publisher and the agent without an answer they can act on.",
      "skill": "licensing",
      "standards": [
        "TDM Reservation Protocol"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to publisher or institution sites, and the site type could not be confirmed (best candidates: api, saas). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "provenance-declared",
      "category": "content",
      "tier": "emerging",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Content provenance declared",
      "why": "Author, publication date and update date are what let an agent judge whether a source is current and attributable before it quotes it.",
      "skill": "provenance",
      "standards": [
        "schema.org/author",
        "C2PA"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to publisher or institution sites, and the site type could not be confirmed (best candidates: api, saas). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "booking-action",
      "category": "commerce",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Machine-readable booking action",
      "why": "For a service business the agent's task is to book, not to browse — a declared action is what turns a contact page into a completed job.",
      "skill": "booking-action",
      "standards": [
        "schema.org/ReserveAction"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to services sites, and the site type could not be confirmed (best candidates: api, saas). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "document-formats",
      "category": "content",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Documents in machine-readable formats",
      "why": "A PDF that carries no document structure is unreadable to an agent and to a screen reader alike — the same defect, found twice.",
      "skill": "document-formats",
      "standards": [
        "PDF/UA"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to institution sites, and the site type could not be confirmed (best candidates: api, saas). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    }
  ],
  "counts": {
    "pass": 11,
    "warn": 10,
    "fail": 30,
    "na": 10,
    "total": 61
  },
  "blockedBy": {
    "level": 2,
    "levelName": "Bot-Aware",
    "checks": [
      "ai-rules",
      "content-signal",
      "sitemap-xml"
    ]
  },
  "nextLevelGaps": [
    "ai-rules",
    "content-signal",
    "sitemap-xml"
  ],
  "ratio": {
    "passed": 11,
    "applicable": 51,
    "label": "11/51"
  },
  "meta": {
    "title": "Stripe | Financial Infrastructure to Grow Your Revenue",
    "description": "Stripe is a financial services platform that helps all types of businesses accept payments, build flexible billing models and manage money movement.",
    "lang": "en-PL",
    "words": 1892,
    "tokensEst": 2554,
    "bytes": 704020
  },
  "requests_log": [
    {
      "path": "/",
      "status": 200,
      "bytes": 704020,
      "ms": 413,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/robots.txt",
      "status": 200,
      "bytes": 643,
      "ms": 297,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/sitemap.xml",
      "status": 404,
      "bytes": 370299,
      "ms": 347,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/llms.txt",
      "status": 200,
      "bytes": 69923,
      "ms": 341,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/llms-full.txt",
      "status": 404,
      "bytes": 370299,
      "ms": 343,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/AGENTS.md",
      "status": 404,
      "bytes": 370299,
      "ms": 219,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/sitemap.md",
      "status": 404,
      "bytes": 370299,
      "ms": 207,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/ai.txt",
      "status": 404,
      "bytes": 370299,
      "ms": 199,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/ai-policy",
      "status": 404,
      "bytes": 370299,
      "ms": 211,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/ai-usage",
      "status": 404,
      "bytes": 370299,
      "ms": 210,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/ai",
      "status": 404,
      "bytes": 372251,
      "ms": 661,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/terms/ai",
      "status": 404,
      "bytes": 370299,
      "ms": 222,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/yapay-zeka-politikasi",
      "status": 404,
      "bytes": 370299,
      "ms": 243,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/auth.md",
      "status": 404,
      "bytes": 370299,
      "ms": 240,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/auth.md",
      "status": 404,
      "bytes": 370299,
      "ms": 208,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/http-message-signatures-directory",
      "status": 404,
      "bytes": 370299,
      "ms": 212,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/agent-permissions.json",
      "status": 404,
      "bytes": 370299,
      "ms": 261,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/agent-permissions.json",
      "status": 404,
      "bytes": 370299,
      "ms": 224,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/mcp/server-card.json",
      "status": 404,
      "bytes": 370299,
      "ms": 244,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/mcp.json",
      "status": 404,
      "bytes": 370299,
      "ms": 217,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/mcp.json",
      "status": 404,
      "bytes": 370299,
      "ms": 247,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/agent-card.json",
      "status": 404,
      "bytes": 370299,
      "ms": 247,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/agent.json",
      "status": 404,
      "bytes": 370299,
      "ms": 203,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/oauth-authorization-server",
      "status": 404,
      "bytes": 370299,
      "ms": 202,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/oauth-protected-resource",
      "status": 404,
      "bytes": 370299,
      "ms": 191,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/openid-configuration",
      "status": 404,
      "bytes": 370299,
      "ms": 208,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/api-catalog",
      "status": 404,
      "bytes": 370299,
      "ms": 211,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/api-catalog.json",
      "status": 404,
      "bytes": 370299,
      "ms": 217,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/ai-plugin.json",
      "status": 404,
      "bytes": 370299,
      "ms": 213,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/agent-skills/index.json",
      "status": 404,
      "bytes": 370299,
      "ms": 218,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/agent-skills.json",
      "status": 404,
      "bytes": 370299,
      "ms": 207,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/skills.json",
      "status": 404,
      "bytes": 370299,
      "ms": 212,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/security.txt",
      "status": 200,
      "bytes": 285,
      "ms": 206,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/security.txt",
      "status": 404,
      "bytes": 370299,
      "ms": 337,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/webmcp.json",
      "status": 404,
      "bytes": 370299,
      "ms": 257,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/webmcp",
      "status": 404,
      "bytes": 370299,
      "ms": 323,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/webmcp.json",
      "status": 404,
      "bytes": 370299,
      "ms": 255,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/ard.json",
      "status": 404,
      "bytes": 370299,
      "ms": 268,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/agent-resources.json",
      "status": 404,
      "bytes": 370299,
      "ms": 227,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/ai-catalog.json",
      "status": 404,
      "bytes": 370299,
      "ms": 263,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/ard.json",
      "status": 404,
      "bytes": 370299,
      "ms": 834,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/ucp",
      "status": 404,
      "bytes": 370299,
      "ms": 251,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/ucp.json",
      "status": 404,
      "bytes": 370299,
      "ms": 237,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/openapi.json",
      "status": 404,
      "bytes": 370299,
      "ms": 239,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/openapi.yaml",
      "status": 404,
      "bytes": 370299,
      "ms": 246,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/openapi.json",
      "status": 404,
      "bytes": 370299,
      "ms": 243,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/api/openapi.json",
      "status": 404,
      "bytes": 370299,
      "ms": 224,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/swagger.json",
      "status": 404,
      "bytes": 370299,
      "ms": 254,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/ai",
      "status": 404,
      "bytes": 370299,
      "ms": 266,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/api",
      "status": 200,
      "bytes": 1387495,
      "ms": 1175,
      "contentType": "text/html",
      "hops": 3
    },
    {
      "path": "/bot",
      "status": 404,
      "bytes": 370299,
      "ms": 236,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/bots",
      "status": 404,
      "bytes": 370299,
      "ms": 250,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/agents",
      "status": 404,
      "bytes": 370299,
      "ms": 217,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/agent",
      "status": 404,
      "bytes": 370299,
      "ms": 245,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/agent-policy",
      "status": 404,
      "bytes": 370299,
      "ms": 238,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/agentic-commerce",
      "status": 404,
      "bytes": 370299,
      "ms": 208,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/terms",
      "status": 200,
      "bytes": 146897,
      "ms": 1003,
      "contentType": "text/html",
      "hops": 2
    },
    {
      "path": "/pricing",
      "status": 200,
      "bytes": 912160,
      "ms": 323,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/fiyatlandirma",
      "status": 404,
      "bytes": 370299,
      "ms": 255,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/fiyat",
      "status": 404,
      "bytes": 370299,
      "ms": 264,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/plans",
      "status": 404,
      "bytes": 370299,
      "ms": 233,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/contact",
      "status": 200,
      "bytes": 350375,
      "ms": 288,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/iletisim",
      "status": 404,
      "bytes": 370299,
      "ms": 262,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/contact-us",
      "status": 404,
      "bytes": 370299,
      "ms": 217,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/faq",
      "status": 200,
      "bytes": 22482,
      "ms": 1272,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/sss",
      "status": 404,
      "bytes": 370299,
      "ms": 250,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/sikca-sorulan-sorular",
      "status": 404,
      "bytes": 370299,
      "ms": 254,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/help",
      "status": 200,
      "bytes": 2362,
      "ms": 1119,
      "contentType": "text/markdown",
      "hops": 1
    },
    {
      "path": "/yardim",
      "status": 404,
      "bytes": 370299,
      "ms": 263,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/docs",
      "status": 200,
      "bytes": 1377176,
      "ms": 1005,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/documentation",
      "status": 404,
      "bytes": 370299,
      "ms": 275,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/developers",
      "status": 404,
      "bytes": 370299,
      "ms": 271,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/gelistiriciler",
      "status": 404,
      "bytes": 370299,
      "ms": 243,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/status",
      "status": 200,
      "bytes": 892,
      "ms": 575,
      "contentType": "text/html",
      "hops": 2
    },
    {
      "path": "/changelog",
      "status": 200,
      "bytes": 1069957,
      "ms": 531,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/releases",
      "status": 404,
      "bytes": 370299,
      "ms": 204,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/whats-new",
      "status": 404,
      "bytes": 370299,
      "ms": 213,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/returns",
      "status": 404,
      "bytes": 370299,
      "ms": 220,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/shipping",
      "status": 404,
      "bytes": 370299,
      "ms": 191,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/iade",
      "status": 404,
      "bytes": 370299,
      "ms": 189,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/kargo",
      "status": 404,
      "bytes": 370299,
      "ms": 192,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/refund-policy",
      "status": 404,
      "bytes": 370299,
      "ms": 190,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/about",
      "status": 200,
      "bytes": 180762,
      "ms": 411,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/products",
      "status": 200,
      "bytes": 695966,
      "ms": 279,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/shop",
      "status": 404,
      "bytes": 370299,
      "ms": 239,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/store",
      "status": 404,
      "bytes": 370299,
      "ms": 227,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/urunler",
      "status": 404,
      "bytes": 370299,
      "ms": 216,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/magaza",
      "status": 404,
      "bytes": 370299,
      "ms": 236,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/cart",
      "status": 404,
      "bytes": 370299,
      "ms": 248,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/sepet",
      "status": 404,
      "bytes": 370299,
      "ms": 224,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/docs/sandbox",
      "status": 404,
      "bytes": 23881,
      "ms": 88,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/sandbox",
      "status": 404,
      "bytes": 370299,
      "ms": 255,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/developers/sandbox",
      "status": 404,
      "bytes": 370299,
      "ms": 234,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/rate-limits.json",
      "status": 404,
      "bytes": 370299,
      "ms": 276,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/rate-limits.json",
      "status": 404,
      "bytes": 370299,
      "ms": 247,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/docs/rate-limits",
      "status": 200,
      "bytes": 817404,
      "ms": 800,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/licensing",
      "status": 404,
      "bytes": 370299,
      "ms": 225,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/tdmrep.json",
      "status": 404,
      "bytes": 370299,
      "ms": 216,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/book",
      "status": 404,
      "bytes": 370299,
      "ms": 241,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/appointment",
      "status": 404,
      "bytes": 370299,
      "ms": 232,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/documents",
      "status": 404,
      "bytes": 370299,
      "ms": 1180,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/publications",
      "status": 404,
      "bytes": 370299,
      "ms": 277,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/reports",
      "status": 404,
      "bytes": 370299,
      "ms": 247,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/payments",
      "status": 200,
      "bytes": 1219077,
      "ms": 1785,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/payments/features",
      "status": 200,
      "bytes": 725825,
      "ms": 416,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/payments/payment-methods",
      "status": 200,
      "bytes": 2865570,
      "ms": 2849,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/authorization-boost",
      "status": 200,
      "bytes": 844274,
      "ms": 1599,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/payments/authentication",
      "status": 200,
      "bytes": 663433,
      "ms": 1321,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/payments/ai",
      "status": 200,
      "bytes": 664640,
      "ms": 1203,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/en-pl/guides/best-practices-for-launching-and-scaling-platform-payments",
      "status": 200,
      "bytes": 520686,
      "ms": 80,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/en-pl/guides/introduction-to-monetizing-payments",
      "status": 200,
      "bytes": 537064,
      "ms": 241,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/",
      "status": 200,
      "bytes": 704020,
      "ms": 302,
      "contentType": "text/html",
      "hops": 1
    }
  ]
}