{"openapi":"3.0.3","info":{"title":"agentgrade","description":"Scan any site for agent capabilities and payment protocols. Produces Lighthouse-like reports for agentic services.","version":"0.2.0"},"servers":[{"url":"/"}],"paths":{"/api/scan":{"get":{"operationId":"scanUrl","summary":"Scan a URL for agent capabilities and payment protocols","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri"},"description":"The URL to scan (must be http or https)"}],"responses":{"200":{"description":"Scan results","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or missing URL"},"500":{"description":"Scan failed or timed out"}}}},"/api/history":{"get":{"operationId":"scanHistory","summary":"Get scan history (requires DATABASE_URL)","parameters":[{"name":"url","in":"query","schema":{"type":"string"},"description":"Filter by URL"},{"name":"limit","in":"query","schema":{"type":"integer","default":20},"description":"Max results (up to 100)"}],"responses":{"200":{"description":"Array of past scan summaries"},"501":{"description":"No database configured"}}}},"/api/badge":{"get":{"operationId":"badge","summary":"SVG badge showing scan results for a URL","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri"}}],"responses":{"200":{"description":"SVG badge image","content":{"image/svg+xml":{}}}}}},"/api/report":{"get":{"operationId":"fullReport","summary":"Full scan report with historical comparison (x402 payment may be required)","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri"}}],"responses":{"200":{"description":"Full report with current scan, previous scan, and delta"},"402":{"description":"Payment required (x402)"}}}},"/api/v1/scan":{"get":{"operationId":"compactScan","summary":"Compact machine-to-machine scan (flat JSON, agent-optimized)","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri"}}],"responses":{"200":{"description":"Compact scan result with score"}}}},"/health":{"get":{"operationId":"healthCheck","summary":"Health check","responses":{"200":{"description":"Service is healthy"}}}}}}