{"openapi":"3.1.0","info":{"title":"Agentic Readiness Scanner API","version":"1.0.0","description":"Public REST API of the Agentic Readiness Scanner. Submit a public website URL, poll or stream the scan until it completes, then read its tier, scores, per-check evidence and remediation. The same capability is exposed as an MCP server at /api/mcp (card at /.well-known/mcp/server-card.json) and as an A2A agent at /api/a2a (card at /.well-known/agent-card.json). No authentication is required; every endpoint is rate limited per client and answers 429 with a Retry-After header when the limit is exceeded. Errors are JSON objects with a stable code and a human-readable message."},"paths":{"/api/health":{"get":{"tags":["system"],"operationId":"health","parameters":[],"security":[],"responses":{"200":{"description":"HealthResponse","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponseEncoded"}}}},"429":{"description":"Too many requests from this client. The response carries a Retry-After header; wait for that delay before retrying.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedEncoded"}}}}},"description":"Reports that the API process is running. It does not touch the database. Requests beyond the per-client rate limit receive 429 with a Retry-After header.","summary":"Liveness probe"}},"/api/ready":{"get":{"tags":["system"],"operationId":"ready","parameters":[],"security":[],"responses":{"200":{"description":"ReadinessResponse","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadinessResponseEncoded"}}}},"429":{"description":"Too many requests from this client. The response carries a Retry-After header; wait for that delay before retrying.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedEncoded"}}}},"503":{"description":"The API cannot reach its database or leaderboard storage right now.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceNotReadyEncoded"}}}}},"description":"Confirms the API can reach its database. Returns 503 while storage is unreachable. Requests beyond the per-client rate limit receive 429 with a Retry-After header.","summary":"Readiness probe"}},"/api/scans":{"post":{"tags":["scans"],"operationId":"scans.create","parameters":[],"security":[],"responses":{"200":{"description":"ScanRecord","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanRecordEncoded"}}}},"400":{"description":"The submitted URL is not a public http(s) hostname URL the scanner can retrieve.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidScanTargetEncoded"}}}},"429":{"description":"The scan backlog is full. Retry after the Retry-After delay; the response body reports the pending count and capacity. | Too many requests from this client. The response carries a Retry-After header; wait for that delay before retrying.","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ScanIntakeSaturatedEncoded"},{"$ref":"#/components/schemas/RateLimitedEncoded"}]}}}}},"description":"Queues a static-retrieval assessment of a public website and returns the scan record immediately with status pending. Poll GET /api/scans/{id} or subscribe to GET /api/scans/{id}/events until the status is completed or failed. Resubmitting the same URL within 24 hours is an idempotent operation for the assessment: the new scan reuses the retained collection (reused: true) instead of retrieving the site again, unless refresh is true. Rate-limit policy: 30 submissions per client per minute at the edge, plus a global intake capacity. Both limits answer 429 with a Retry-After header; wait for that delay before retrying.","summary":"Start a scan","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Public http(s) URL of the website to assess. A bare hostname is accepted and defaults to https."},"refresh":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Set to true to force a fresh collection instead of reusing a collection retrieved within the last 24 hours."}},"required":["url"],"additionalProperties":false}}},"required":true}}},"/api/scans/{id}":{"get":{"tags":["scans"],"operationId":"scans.get","parameters":[{"name":"id","in":"path","schema":{"type":"string","description":"Scan identifier (UUID) returned by POST /api/scans or shown in a report URL."},"required":true,"description":"Scan identifier (UUID) returned by POST /api/scans or shown in a report URL."}],"security":[],"responses":{"200":{"description":"ScanRecord","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanRecordEncoded"}}}},"404":{"description":"No scan exists with the requested identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanNotFoundEncoded"}}}},"429":{"description":"Too many requests from this client. The response carries a Retry-After header; wait for that delay before retrying.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedEncoded"}}}}},"description":"Returns the current status of a scan and, once completed, the full discovery evidence and assessment. Rate-limit policy: 600 reads per client per minute; excess requests receive 429 with a Retry-After header.","summary":"Read a scan"}},"/api/scans/{id}/events":{"get":{"tags":["scans"],"operationId":"scans.events","parameters":[{"name":"id","in":"path","schema":{"type":"string","description":"Scan identifier (UUID) returned by POST /api/scans or shown in a report URL."},"required":true,"description":"Scan identifier (UUID) returned by POST /api/scans or shown in a report URL."},{"name":"last-event-id","in":"header","schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor from the last received SSE event id. Resumes the stream after that event instead of replaying from the start."},"required":false,"description":"Cursor from the last received SSE event id. Resumes the stream after that event instead of replaying from the start."}],"security":[],"responses":{"200":{"description":"Success","content":{"text/event-stream":{"schema":{"type":"object","properties":{"id":{"type":"string"},"event":{"type":"string"},"data":{"type":"string","contentMediaType":"application/json"}},"required":["id","event","data"],"additionalProperties":false},"x-effect-stream":{"encoding":"sse","causeSchema":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"_tag":{"type":"string","enum":["Fail"]},"error":{"not":{}}},"required":["_tag","error"],"additionalProperties":false},{"type":"object","properties":{"_tag":{"type":"string","enum":["Die"]},"defect":{}},"required":["_tag","defect"],"additionalProperties":false},{"type":"object","properties":{"_tag":{"type":"string","enum":["Interrupt"]},"fiberId":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["_tag","fiberId"],"additionalProperties":false}]}},"errorSchema":{"not":{}},"failureEvent":"effect/httpapi/stream/failure"}}}},"404":{"description":"No scan exists with the requested identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanNotFoundEncoded"}}}},"429":{"description":"Too many requests from this client. The response carries a Retry-After header; wait for that delay before retrying.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedEncoded"}}}}},"description":"Server-sent events describing each retrieval and settled check while the scan runs, ending with a terminal event. Completed scans replay their persisted events. Rate-limit policy: 600 reads per client per minute; excess requests receive 429 with a Retry-After header.","summary":"Stream scan progress"}},"/api/leaderboard":{"get":{"tags":["leaderboard"],"operationId":"leaderboard.get","parameters":[],"security":[],"responses":{"200":{"description":"LeaderboardResponse","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaderboardResponseEncoded"}}}},"429":{"description":"Too many requests from this client. The response carries a Retry-After header; wait for that delay before retrying.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedEncoded"}}}},"503":{"description":"The API cannot reach its database or leaderboard storage right now.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceNotReadyEncoded"}}}}},"description":"Returns the highest-scoring domains with their tier, score and latest scan identifier, plus corpus totals. The list is capped at 100 entries. Rate-limit policy: 600 reads per client per minute; excess requests receive 429 with a Retry-After header.","summary":"Read the public leaderboard"}},"/api/leaderboard/scans/{scanId}":{"get":{"tags":["leaderboard"],"operationId":"leaderboard.position","parameters":[{"name":"scanId","in":"path","schema":{"type":"string","description":"Scan identifier (UUID) whose domain rank should be looked up."},"required":true,"description":"Scan identifier (UUID) whose domain rank should be looked up."}],"security":[],"responses":{"200":{"description":"LeaderboardPosition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaderboardPositionEncoded"}}}},"429":{"description":"Too many requests from this client. The response carries a Retry-After header; wait for that delay before retrying.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedEncoded"}}}},"503":{"description":"The API cannot reach its database or leaderboard storage right now.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceNotReadyEncoded"}}}}},"description":"Returns the leaderboard rank of the domain behind a scan, or a null rank when the domain is not ranked. Rate-limit policy: 600 reads per client per minute; excess requests receive 429 with a Retry-After header.","summary":"Locate a scan on the leaderboard"}},"/api/a2a":{"post":{"tags":["a2a"],"operationId":"a2a.send","parameters":[],"security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"]}]},{"type":"null"}]},"result":{"anyOf":[{},{"type":"null"}],"description":"A2A Task object for message/send and tasks/get when the call succeeds."},"error":{"anyOf":[{"type":"object","properties":{"code":{"type":"integer","description":"JSON-RPC or A2A error code."},"message":{"type":"string","description":"Human-readable error message."},"data":{"anyOf":[{},{"type":"null"}]}},"required":["code","message"],"additionalProperties":false},{"type":"null"}]}},"required":["jsonrpc","id"],"additionalProperties":false}}}},"429":{"description":"Too many requests from this client. The response carries a Retry-After header; wait for that delay before retrying.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedEncoded"}}}}},"description":"Agent-to-Agent (A2A 0.3) JSON-RPC 2.0 interface for the scan-website skill, described by /.well-known/agent-card.json. message/send accepts a text part containing a public website URL, starts a scan and returns the Task; tasks/get returns the Task for a scan id; tasks/cancel is not supported and returns TaskNotCancelableError. Sending the same URL again within 24 hours is an idempotent operation for the assessment: the returned Task reuses the retained collection instead of retrieving the site again. Protocol errors are returned as JSON-RPC error objects with HTTP 200. Requests beyond the per-client rate limit receive HTTP 429 with a Retry-After header.","summary":"A2A JSON-RPC endpoint","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"anyOf":[{"anyOf":[{"type":"string"},{"anyOf":[{"type":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"]}]},{"type":"null"}]},{"type":"null"}],"description":"Request identifier echoed back in the response."},"method":{"type":"string","description":"A2A method name: message/send, tasks/get or tasks/cancel."},"params":{"anyOf":[{},{"type":"null"}],"description":"Method parameters as defined by the A2A specification."}},"required":["jsonrpc","method"],"additionalProperties":false}}},"required":true}}}},"components":{"schemas":{"HealthResponseEncoded":{"type":"object","properties":{"service":{"type":"string","enum":["api"]},"status":{"type":"string","enum":["ok"]}},"required":["service","status"],"additionalProperties":false},"RateLimitedEncoded":{"type":"object","properties":{"_tag":{"type":"string","enum":["RateLimited"]},"code":{"type":"string","enum":["rate_limited"]},"message":{"type":"string"}},"required":["_tag","code","message"],"additionalProperties":false},"ReadinessResponseEncoded":{"type":"object","properties":{"database":{"type":"string","enum":["connected"]},"service":{"type":"string","enum":["api"]},"status":{"type":"string","enum":["ready"]}},"required":["database","service","status"],"additionalProperties":false},"ServiceNotReadyEncoded":{"type":"object","properties":{"_tag":{"type":"string","enum":["ServiceNotReady"]},"code":{"type":"string","enum":["service_unavailable"]},"message":{"type":"string"}},"required":["_tag","code","message"],"additionalProperties":false},"agentic-readiness-scanner_scan-corpus_ScanTargetEncoded":{"type":"object","properties":{"startingResource":{"type":"string"},"canonicalOrigin":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["startingResource","canonicalOrigin"],"additionalProperties":false},"agentic-readiness-scanner_scan-corpus_CollectionBudgetEncoded":{"type":"object","properties":{"httpExchangesUsed":{"type":"integer"},"decodedBytesUsed":{"type":"integer"},"representativePagesSelected":{"type":"integer"},"sitemapDocumentsUsed":{"type":"integer"},"sitemapEntriesInspected":{"type":"integer"},"declaredResourcesFollowed":{"type":"integer"},"elapsedMs":{"type":"number"}},"required":["httpExchangesUsed","decodedBytesUsed","representativePagesSelected","sitemapDocumentsUsed","sitemapEntriesInspected","declaredResourcesFollowed","elapsedMs"],"additionalProperties":false},"agentic-readiness-scanner_scan-corpus_DiscoveryLinkEncoded":{"type":"object","properties":{"logicalRetrievalId":{"type":"string"},"observationId":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"type":"string","enum":["starting-resource","robots-policy","canonical-homepage","related-surface","fixed-discovery-artifact","declared-sitemap","applicability-artifact","bounded-script-source","representative-page","declared-resource","representation-variant","recovery-probe","tooling-discovery","document","parse-failure","robots-rule","robots-sitemap","sitemap-entry","resource-reference","html-metadata","http-link","response-equivalence"]},"relation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["logicalRetrievalId","observationId","kind","relation"],"additionalProperties":false},"agentic-readiness-scanner_scan-corpus_RevealerEncoded":{"type":"object","properties":{"logicalRetrievalId":{"type":"string"},"observationId":{"type":"string"}},"required":["logicalRetrievalId","observationId"],"additionalProperties":false},"agentic-readiness-scanner_scan-corpus_LogicalRetrievalEncoded":{"type":"object","properties":{"id":{"type":"string"},"normalizedUrl":{"type":"string"},"reason":{"type":"string","enum":["starting-resource","robots-policy","canonical-homepage","related-surface","fixed-discovery-artifact","declared-sitemap","applicability-artifact","bounded-script-source","representative-page","declared-resource","representation-variant","recovery-probe","tooling-discovery"]},"priority":{"type":"integer"},"requestIdentity":{"type":"string"},"representationVariant":{"type":"string"},"state":{"type":"string","enum":["scheduled","completed","skipped"]},"outcome":{"anyOf":[{"type":"string","enum":["retrieved","absent","policy-blocked","access-refused","safety-rejected","unavailable","invalid-response","budget-exhausted"]},{"type":"null"}]},"decision":{"type":"string"},"attemptIds":{"type":"array","items":{"type":"string"}},"discoveredFrom":{"anyOf":[{"$ref":"#/components/schemas/agentic-readiness-scanner_scan-corpus_DiscoveryLinkEncoded"},{"type":"null"}]},"alsoRevealedBy":{"type":"array","items":{"$ref":"#/components/schemas/agentic-readiness-scanner_scan-corpus_RevealerEncoded"}}},"required":["id","normalizedUrl","reason","priority","requestIdentity","representationVariant","state","outcome","decision","attemptIds","discoveredFrom","alsoRevealedBy"],"additionalProperties":false},"agentic-readiness-scanner_discovery-graph_StreamedAttemptEncoded":{"type":"object","properties":{"id":{"type":"string"},"sequence":{"type":"integer"},"status":{"anyOf":[{"type":"integer"},{"type":"null"}]},"requestUrl":{"type":"string"},"normalizedUrl":{"type":"string"},"redirectFromAttemptId":{"anyOf":[{"type":"string"},{"type":"null"}]},"retryOfAttemptId":{"anyOf":[{"type":"string"},{"type":"null"}]},"durationMs":{"type":"number"},"mediaType":{"anyOf":[{"type":"string"},{"type":"null"}]},"decodedBytes":{"type":"integer"},"failureCategory":{"type":"string","enum":["none","dns","tls","timeout","transport","http-status","redirect","policy","safety","budget","compression","media-type","parse"]},"decision":{"type":"string"}},"required":["id","sequence","status","requestUrl","normalizedUrl","redirectFromAttemptId","retryOfAttemptId","durationMs","mediaType","decodedBytes","failureCategory","decision"],"additionalProperties":false},"agentic-readiness-scanner_discovery-graph_DiscoveryObservationEncoded":{"type":"object","properties":{"id":{"type":"string"},"logicalRetrievalId":{"type":"string"},"kind":{"type":"string","enum":["document","parse-failure","robots-rule","robots-sitemap","sitemap-entry","resource-reference","html-metadata","http-link","response-equivalence"]},"sourcePointer":{"type":"string"},"value":{"type":"string"},"relation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","logicalRetrievalId","kind","sourcePointer","value","relation"],"additionalProperties":false},"agentic-readiness-scanner_scan-corpus_PhaseCheckpointEncoded":{"type":"object","properties":{"phase":{"type":"string","enum":["starting","origin","well-known","sitemaps","agent-views","capabilities","pages","declared"]},"retrievalCount":{"type":"integer"}},"required":["phase","retrievalCount"],"additionalProperties":false},"agentic-readiness-scanner_discovery-graph_DiscoveryCorpusEncoded":{"type":"object","properties":{"collectionRunId":{"type":"string"},"target":{"$ref":"#/components/schemas/agentic-readiness-scanner_scan-corpus_ScanTargetEncoded"},"startedAt":{"type":"string"},"completedAt":{"type":"string"},"terminalState":{"type":"string","enum":["completed","budget-exhausted","failed"]},"budget":{"$ref":"#/components/schemas/agentic-readiness-scanner_scan-corpus_CollectionBudgetEncoded"},"retrievals":{"type":"array","items":{"$ref":"#/components/schemas/agentic-readiness-scanner_scan-corpus_LogicalRetrievalEncoded"}},"attempts":{"type":"array","items":{"$ref":"#/components/schemas/agentic-readiness-scanner_discovery-graph_StreamedAttemptEncoded"}},"observations":{"type":"array","items":{"$ref":"#/components/schemas/agentic-readiness-scanner_discovery-graph_DiscoveryObservationEncoded"}},"phaseCheckpoints":{"type":"array","items":{"$ref":"#/components/schemas/agentic-readiness-scanner_scan-corpus_PhaseCheckpointEncoded"}}},"required":["collectionRunId","target","startedAt","completedAt","terminalState","budget","retrievals","attempts","observations","phaseCheckpoints"],"additionalProperties":false},"AssessmentScoresEncoded":{"type":"object","properties":{"overall":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"earned":{"type":"integer"},"possible":{"type":"integer"},"unassessed":{"type":"integer"},"excluded":{"type":"integer"},"state":{"type":"string","enum":["final"]},"percent":{"type":"number"}},"required":["id","earned","possible","unassessed","excluded","state","percent"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"earned":{"type":"integer"},"possible":{"type":"integer"},"unassessed":{"type":"integer"},"excluded":{"type":"integer"},"state":{"type":"string","enum":["not-applicable"]}},"required":["id","earned","possible","unassessed","excluded","state"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"earned":{"type":"integer"},"possible":{"type":"integer"},"unassessed":{"type":"integer"},"excluded":{"type":"integer"},"state":{"type":"string","enum":["unavailable"]}},"required":["id","earned","possible","unassessed","excluded","state"],"additionalProperties":false}]},"gates":{"type":"array","items":{"type":"object","properties":{"checkId":{"type":"string","enum":["npm.official-package-discovery","npm.cli-declaration-validity","policy.robots-determinability","discovery.sitemap-validity","sitemap.lastmod-observation","representation.substantive-static","representation.parseable-navigation","access.user-agent-parity","access.permitted-agent-retrieval","address.redirect-chain-validity","access.public-surface-availability","access.declared-page-login-wall","recovery.not-found-guidance","policy.named-agent-consistency","policy.agent-user-effective-access","policy.content-signals-validity","discovery.typed-link-validity","discovery.dns-aid-observation","discovery.llms-file","discovery.llms-structure","discovery.llms-reference-integrity","discovery.llms-scoped-file-observation","docs.agent-usage-instructions","representation.markdown-negotiation","address.negotiation-vary","representation.markdown-twin-observation","discovery.markdown-alternate","representation.markdown-frontmatter-validity","representation.agent-ua-variant-observation","representation.context-size-observation","representation.markdown-fence-validity","structured-data.jsonld-validity","structured-data.identity-completeness","structured-data.same-as-validity","structured-data.type-inventory","structured-data.organization-field-observation","html.metadata-validity","commerce.pricing-markdown-validity","html.static-document-structure","html.static-accessible-name-source","html.static-form-label-association","agent-skills.discovery-origin","agent-skills.index-validity","agent-skills.resource-integrity","a2a.discovery-origin","a2a.card-validity","a2a.reference-integrity","ard.discovery-origin","ai-catalog.discovery-validity","ard.entry-validity","ard.trust-manifest-local-validity","mcp.well-known-card-discovery","mcp.card-validity","mcp.card-static-consistency","bot-identity.web-bot-auth-directory-observation","api.public-documentation-discovery","api-description.authoritative-discovery","openapi.document-validity","api-catalog.validity","authorization.server-metadata-validity","authorization.resource-metadata-validity","authorization.scope-consistency","authorization.auth-markdown-presence","authorization.auth-markdown-structure","authorization.challenge-resource-metadata","api.sandbox-declaration-validity","openapi.structured-error-response-coverage","openapi.typed-error-model","openapi.success-response-schema-coverage","openapi.action-input-and-security-integrity","openapi.parameter-description-coverage","openapi.schema-complexity-observation","openapi.deprecation-guidance","openapi.pagination-shape-observation","openapi.async-job-contract","openapi.batch-operation-observation","openapi.idempotency-observation","openapi.rate-limit-recovery-guidance","mcp.static-card-discovery","webmcp.source-marker-observation","commerce.mpp-marker-observation","commerce.ucp-manifest-validity","commerce.acp-declaration-observation","commerce.ap2-extension-validity"]},"maxTier":{"type":"string","enum":["A","B","C","D","E"]}},"required":["checkId","maxTier"],"additionalProperties":false}},"categories":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"earned":{"type":"integer"},"possible":{"type":"integer"},"unassessed":{"type":"integer"},"excluded":{"type":"integer"},"state":{"type":"string","enum":["final"]},"percent":{"type":"number"}},"required":["id","earned","possible","unassessed","excluded","state","percent"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"earned":{"type":"integer"},"possible":{"type":"integer"},"unassessed":{"type":"integer"},"excluded":{"type":"integer"},"state":{"type":"string","enum":["not-applicable"]}},"required":["id","earned","possible","unassessed","excluded","state"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"earned":{"type":"integer"},"possible":{"type":"integer"},"unassessed":{"type":"integer"},"excluded":{"type":"integer"},"state":{"type":"string","enum":["unavailable"]}},"required":["id","earned","possible","unassessed","excluded","state"],"additionalProperties":false}]}},"modules":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"earned":{"type":"integer"},"possible":{"type":"integer"},"unassessed":{"type":"integer"},"excluded":{"type":"integer"},"state":{"type":"string","enum":["final"]},"percent":{"type":"number"}},"required":["id","earned","possible","unassessed","excluded","state","percent"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"earned":{"type":"integer"},"possible":{"type":"integer"},"unassessed":{"type":"integer"},"excluded":{"type":"integer"},"state":{"type":"string","enum":["not-applicable"]}},"required":["id","earned","possible","unassessed","excluded","state"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"earned":{"type":"integer"},"possible":{"type":"integer"},"unassessed":{"type":"integer"},"excluded":{"type":"integer"},"state":{"type":"string","enum":["unavailable"]}},"required":["id","earned","possible","unassessed","excluded","state"],"additionalProperties":false}]}}},"required":["overall","gates","categories","modules"],"additionalProperties":false},"CapabilityModuleResultEncoded":{"type":"object","properties":{"id":{"type":"string","enum":["access-policy","http-access","site-navigation","llms-txt","agent-guidance","content-representations","json-ld","html-metadata","html-semantics","api","developer-tools","authorization","agent-skills","a2a","ard","ai-catalog","mcp","webmcp","commerce","bot-identity"]},"activation":{"type":"string","enum":["active","not-declared","unknown"]}},"required":["id","activation"],"additionalProperties":false},"agentic-readiness-scanner_assessment_AssessmentEvidenceEncoded":{"type":"object","properties":{"retrievalId":{"anyOf":[{"type":"string"},{"type":"null"}]},"attemptId":{"anyOf":[{"type":"string"},{"type":"null"}]},"artifactId":{"anyOf":[{"type":"string"},{"type":"null"}]},"observationId":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourcePointer":{"type":"string"},"role":{"type":"string","enum":["core","corroborating","supporting"]},"summary":{"type":"string"}},"required":["retrievalId","attemptId","artifactId","observationId","sourcePointer","role","summary"],"additionalProperties":false},"agentic-readiness-scanner_assessment_CheckResultEncoded":{"type":"object","properties":{"id":{"type":"string","enum":["npm.official-package-discovery","npm.cli-declaration-validity","policy.robots-determinability","discovery.sitemap-validity","sitemap.lastmod-observation","representation.substantive-static","representation.parseable-navigation","access.user-agent-parity","access.permitted-agent-retrieval","address.redirect-chain-validity","access.public-surface-availability","access.declared-page-login-wall","recovery.not-found-guidance","policy.named-agent-consistency","policy.agent-user-effective-access","policy.content-signals-validity","discovery.typed-link-validity","discovery.dns-aid-observation","discovery.llms-file","discovery.llms-structure","discovery.llms-reference-integrity","discovery.llms-scoped-file-observation","docs.agent-usage-instructions","representation.markdown-negotiation","address.negotiation-vary","representation.markdown-twin-observation","discovery.markdown-alternate","representation.markdown-frontmatter-validity","representation.agent-ua-variant-observation","representation.context-size-observation","representation.markdown-fence-validity","structured-data.jsonld-validity","structured-data.identity-completeness","structured-data.same-as-validity","structured-data.type-inventory","structured-data.organization-field-observation","html.metadata-validity","commerce.pricing-markdown-validity","html.static-document-structure","html.static-accessible-name-source","html.static-form-label-association","agent-skills.discovery-origin","agent-skills.index-validity","agent-skills.resource-integrity","a2a.discovery-origin","a2a.card-validity","a2a.reference-integrity","ard.discovery-origin","ai-catalog.discovery-validity","ard.entry-validity","ard.trust-manifest-local-validity","mcp.well-known-card-discovery","mcp.card-validity","mcp.card-static-consistency","bot-identity.web-bot-auth-directory-observation","api.public-documentation-discovery","api-description.authoritative-discovery","openapi.document-validity","api-catalog.validity","authorization.server-metadata-validity","authorization.resource-metadata-validity","authorization.scope-consistency","authorization.auth-markdown-presence","authorization.auth-markdown-structure","authorization.challenge-resource-metadata","api.sandbox-declaration-validity","openapi.structured-error-response-coverage","openapi.typed-error-model","openapi.success-response-schema-coverage","openapi.action-input-and-security-integrity","openapi.parameter-description-coverage","openapi.schema-complexity-observation","openapi.deprecation-guidance","openapi.pagination-shape-observation","openapi.async-job-contract","openapi.batch-operation-observation","openapi.idempotency-observation","openapi.rate-limit-recovery-guidance","mcp.static-card-discovery","webmcp.source-marker-observation","commerce.mpp-marker-observation","commerce.ucp-manifest-validity","commerce.acp-declaration-observation","commerce.ap2-extension-validity"]},"state":{"type":"string","enum":["pass","fail","not-applicable","unable-to-check","not-assessed"]},"evidenceConfidence":{"type":"string","enum":["high","medium","low"]},"summary":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"evidence":{"type":"array","items":{"$ref":"#/components/schemas/agentic-readiness-scanner_assessment_AssessmentEvidenceEncoded"}},"measurements":{"type":"object","additionalProperties":{"type":"string"}},"capabilityDeclared":{"type":"boolean"},"corroborationMissing":{"type":"boolean"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","state","evidenceConfidence","summary","method","evidence","measurements","capabilityDeclared","corroborationMissing","remediation"],"additionalProperties":false},"agentic-readiness-scanner_assessment_CapabilityOpportunityEncoded":{"type":"object","properties":{"question":{"type":"string"},"eligibleCheckIds":{"type":"array","items":{"type":"string","enum":["npm.official-package-discovery","npm.cli-declaration-validity","policy.robots-determinability","discovery.sitemap-validity","sitemap.lastmod-observation","representation.substantive-static","representation.parseable-navigation","access.user-agent-parity","access.permitted-agent-retrieval","address.redirect-chain-validity","access.public-surface-availability","access.declared-page-login-wall","recovery.not-found-guidance","policy.named-agent-consistency","policy.agent-user-effective-access","policy.content-signals-validity","discovery.typed-link-validity","discovery.dns-aid-observation","discovery.llms-file","discovery.llms-structure","discovery.llms-reference-integrity","discovery.llms-scoped-file-observation","docs.agent-usage-instructions","representation.markdown-negotiation","address.negotiation-vary","representation.markdown-twin-observation","discovery.markdown-alternate","representation.markdown-frontmatter-validity","representation.agent-ua-variant-observation","representation.context-size-observation","representation.markdown-fence-validity","structured-data.jsonld-validity","structured-data.identity-completeness","structured-data.same-as-validity","structured-data.type-inventory","structured-data.organization-field-observation","html.metadata-validity","commerce.pricing-markdown-validity","html.static-document-structure","html.static-accessible-name-source","html.static-form-label-association","agent-skills.discovery-origin","agent-skills.index-validity","agent-skills.resource-integrity","a2a.discovery-origin","a2a.card-validity","a2a.reference-integrity","ard.discovery-origin","ai-catalog.discovery-validity","ard.entry-validity","ard.trust-manifest-local-validity","mcp.well-known-card-discovery","mcp.card-validity","mcp.card-static-consistency","bot-identity.web-bot-auth-directory-observation","api.public-documentation-discovery","api-description.authoritative-discovery","openapi.document-validity","api-catalog.validity","authorization.server-metadata-validity","authorization.resource-metadata-validity","authorization.scope-consistency","authorization.auth-markdown-presence","authorization.auth-markdown-structure","authorization.challenge-resource-metadata","api.sandbox-declaration-validity","openapi.structured-error-response-coverage","openapi.typed-error-model","openapi.success-response-schema-coverage","openapi.action-input-and-security-integrity","openapi.parameter-description-coverage","openapi.schema-complexity-observation","openapi.deprecation-guidance","openapi.pagination-shape-observation","openapi.async-job-contract","openapi.batch-operation-observation","openapi.idempotency-observation","openapi.rate-limit-recovery-guidance","mcp.static-card-discovery","webmcp.source-marker-observation","commerce.mpp-marker-observation","commerce.ucp-manifest-validity","commerce.acp-declaration-observation","commerce.ap2-extension-validity"]}},"estimateAssumption":{"type":"string"},"moduleId":{"type":"string","enum":["api","developer-tools","authorization","agent-skills","a2a","ard","ai-catalog","mcp","webmcp","commerce","bot-identity"]},"evidenceCheckIds":{"type":"array","items":{"type":"string","enum":["npm.official-package-discovery","npm.cli-declaration-validity","policy.robots-determinability","discovery.sitemap-validity","sitemap.lastmod-observation","representation.substantive-static","representation.parseable-navigation","access.user-agent-parity","access.permitted-agent-retrieval","address.redirect-chain-validity","access.public-surface-availability","access.declared-page-login-wall","recovery.not-found-guidance","policy.named-agent-consistency","policy.agent-user-effective-access","policy.content-signals-validity","discovery.typed-link-validity","discovery.dns-aid-observation","discovery.llms-file","discovery.llms-structure","discovery.llms-reference-integrity","discovery.llms-scoped-file-observation","docs.agent-usage-instructions","representation.markdown-negotiation","address.negotiation-vary","representation.markdown-twin-observation","discovery.markdown-alternate","representation.markdown-frontmatter-validity","representation.agent-ua-variant-observation","representation.context-size-observation","representation.markdown-fence-validity","structured-data.jsonld-validity","structured-data.identity-completeness","structured-data.same-as-validity","structured-data.type-inventory","structured-data.organization-field-observation","html.metadata-validity","commerce.pricing-markdown-validity","html.static-document-structure","html.static-accessible-name-source","html.static-form-label-association","agent-skills.discovery-origin","agent-skills.index-validity","agent-skills.resource-integrity","a2a.discovery-origin","a2a.card-validity","a2a.reference-integrity","ard.discovery-origin","ai-catalog.discovery-validity","ard.entry-validity","ard.trust-manifest-local-validity","mcp.well-known-card-discovery","mcp.card-validity","mcp.card-static-consistency","bot-identity.web-bot-auth-directory-observation","api.public-documentation-discovery","api-description.authoritative-discovery","openapi.document-validity","api-catalog.validity","authorization.server-metadata-validity","authorization.resource-metadata-validity","authorization.scope-consistency","authorization.auth-markdown-presence","authorization.auth-markdown-structure","authorization.challenge-resource-metadata","api.sandbox-declaration-validity","openapi.structured-error-response-coverage","openapi.typed-error-model","openapi.success-response-schema-coverage","openapi.action-input-and-security-integrity","openapi.parameter-description-coverage","openapi.schema-complexity-observation","openapi.deprecation-guidance","openapi.pagination-shape-observation","openapi.async-job-contract","openapi.batch-operation-observation","openapi.idempotency-observation","openapi.rate-limit-recovery-guidance","mcp.static-card-discovery","webmcp.source-marker-observation","commerce.mpp-marker-observation","commerce.ucp-manifest-validity","commerce.acp-declaration-observation","commerce.ap2-extension-validity"]}},"whyThisFits":{"type":"string"},"proposedBehavior":{"type":"string"},"smallestUsefulStep":{"type":"string"}},"required":["question","eligibleCheckIds","estimateAssumption","moduleId","evidenceCheckIds","whyThisFits","proposedBehavior","smallestUsefulStep"],"additionalProperties":false},"agentic-readiness-scanner_assessment_AssessmentResultEncoded":{"type":"object","properties":{"schemaVersion":{"type":"string","enum":["13"]},"checkCatalogVersion":{"type":"string","enum":["2.10.0"]},"assessmentModelVersion":{"type":"string","enum":["4.0.0"]},"opportunityRulesVersion":{"type":"string","enum":["2.1.0"]},"checkCatalogAmendedOn":{"type":"string"},"scores":{"$ref":"#/components/schemas/AssessmentScoresEncoded"},"collectionRunId":{"type":"string"},"target":{"$ref":"#/components/schemas/agentic-readiness-scanner_scan-corpus_ScanTargetEncoded"},"targetState":{"type":"string","enum":["normal","could-not-assess","closed-by-policy","capability-endpoint"]},"modules":{"type":"array","items":{"$ref":"#/components/schemas/CapabilityModuleResultEncoded"}},"checks":{"type":"array","items":{"$ref":"#/components/schemas/agentic-readiness-scanner_assessment_CheckResultEncoded"}},"opportunities":{"type":"array","items":{"$ref":"#/components/schemas/agentic-readiness-scanner_assessment_CapabilityOpportunityEncoded"}},"tooling":{"anyOf":[{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","not-assessed"]},"summary":{"type":"string"},"documentsInspected":{"type":"integer"},"searches":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"retrievalId":{"type":"string"},"successful":{"type":"boolean"}},"required":["url","retrievalId","successful"],"additionalProperties":false}},"packages":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]},"registryUrl":{"type":"string"},"association":{"type":"string","enum":["confirmed","unconfirmed"]},"associationReason":{"type":"string"},"kind":{"type":"string","enum":["cli","package","unknown"]},"commands":{"type":"array","items":{"type":"string"}},"deprecated":{"anyOf":[{"type":"string"},{"type":"null"}]},"outcome":{"type":"string","enum":["retrieved","absent","unavailable","invalid","budget-exhausted"]},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"retrievalId":{"type":"string"},"kind":{"type":"string","enum":["documentation","npm-search","npm-metadata"]},"excerpt":{"type":"string"}},"required":["url","retrievalId","kind","excerpt"],"additionalProperties":false}}},"required":["name","version","registryUrl","association","associationReason","kind","commands","deprecated","outcome","sources"],"additionalProperties":false}}},"required":["state","summary","documentsInspected","searches","packages"],"additionalProperties":false},{"type":"null"}]}},"required":["schemaVersion","checkCatalogVersion","assessmentModelVersion","opportunityRulesVersion","checkCatalogAmendedOn","scores","collectionRunId","target","targetState","modules","checks","opportunities"],"additionalProperties":false},"ScanRecordEncoded":{"type":"object","properties":{"id":{"type":"string","description":"Scan identifier (UUID). Use it to poll GET /api/scans/{id}."},"startingResource":{"type":"string","description":"Normalized URL the scanner was asked to retrieve."},"status":{"type":"string","enum":["pending","running","completed","failed"],"description":"Lifecycle state of a scan. Poll until the status is completed or failed."},"failure":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Human-readable failure reason when the status is failed; otherwise null."},"reused":{"type":"boolean","description":"True when the scan reused a collection retrieved within the last 24 hours instead of fetching the site again."},"collectedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp of the collection run; null until the scan completes."},"discovery":{"anyOf":[{"$ref":"#/components/schemas/agentic-readiness-scanner_discovery-graph_DiscoveryCorpusEncoded"},{"type":"null"}],"description":"Retrieval evidence for the completed scan; null until the scan completes."},"assessment":{"anyOf":[{"$ref":"#/components/schemas/agentic-readiness-scanner_assessment_AssessmentResultEncoded"},{"type":"null"}],"description":"Scores, per-check results and remediation for the completed scan; null until the scan completes."}},"required":["id","startingResource","status","failure","reused","collectedAt","discovery","assessment"],"additionalProperties":false},"InvalidScanTargetEncoded":{"type":"object","properties":{"_tag":{"type":"string","enum":["InvalidScanTarget"]},"code":{"type":"string","enum":["invalid_scan_target"]},"message":{"type":"string"},"reason":{"type":"string"}},"required":["_tag","code","message","reason"],"additionalProperties":false},"ScanIntakeSaturatedEncoded":{"type":"object","properties":{"_tag":{"type":"string","enum":["ScanIntakeSaturated"]},"code":{"type":"string","enum":["scan_intake_saturated"]},"message":{"type":"string"},"pendingScans":{"type":"integer"},"capacity":{"type":"integer"}},"required":["_tag","code","message","pendingScans","capacity"],"additionalProperties":false},"ScanNotFoundEncoded":{"type":"object","properties":{"_tag":{"type":"string","enum":["ScanNotFound"]},"code":{"type":"string","enum":["scan_not_found"]},"message":{"type":"string"},"scanId":{"type":"string"}},"required":["_tag","code","message","scanId"],"additionalProperties":false},"LeaderboardEntryEncoded":{"type":"object","properties":{"domain":{"type":"string","description":"Canonical hostname of the ranked website."},"scanCount":{"type":"integer","description":"Number of completed scans recorded for this domain."},"scanId":{"type":"string","description":"Identifier of the scan whose score is shown."},"startingResource":{"type":"string","description":"URL that was submitted for the shown scan."},"collectedAt":{"type":"string","description":"ISO 8601 timestamp of the shown scan's collection run."},"score":{"type":"number","description":"Overall score from 0 to 100."},"tier":{"type":"string","enum":["S","A","B","C","D","E"]}},"required":["domain","scanCount","scanId","startingResource","collectedAt","score","tier"],"additionalProperties":false},"LeaderboardResponseEncoded":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/LeaderboardEntryEncoded"},"description":"Top domains ordered by score; at most 100 entries."},"totalScanCount":{"type":"integer","description":"Completed scans across all domains."},"totalDomainCount":{"type":"integer","description":"Distinct domains with at least one completed scan."},"rankedDomainCount":{"type":"integer","description":"Domains that currently hold a rank."}},"required":["entries","totalScanCount","totalDomainCount","rankedDomainCount"],"additionalProperties":false},"LeaderboardPositionEncoded":{"type":"object","properties":{"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"1-based rank of the scan's domain, or null when unranked."},"total":{"type":"integer","description":"Number of ranked domains."},"latestScanId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Most recent completed scan for the same domain, or null when none exists."}},"required":["rank","total","latestScanId"],"additionalProperties":false}},"securitySchemes":{}},"security":[],"tags":[{"name":"system"},{"name":"scans"},{"name":"leaderboard"},{"name":"a2a"}]}