{"openapi":"3.1.0","info":{"title":"Legible scan API","version":"1.0.0","description":"Runs Legible's agent-readiness checks on one domain, or on one company on the email-API board. No API key. Live scans are limited to 50 per 10 minutes per network; a result is cached for up to 10 minutes (1 minute when a file was slow or busy), and a cached result doesn't count. A rescan skips that cache, counts as a live scan and is limited to one a minute per domain. A scan stops after 20 seconds."},"servers":[{"url":"https://leaderfile.vercel.app"}],"paths":{"/api/scan":{"post":{"operationId":"scanDomain","summary":"Scan a domain, or a company on the board","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","example":"resend.com"},"rescan":{"type":"boolean","description":"Read the site again instead of returning a cached result"}}},{"type":"object","required":["board"],"properties":{"board":{"type":"string","example":"sendgrid"},"rescan":{"type":"boolean","description":"Read the site again instead of returning a cached result"}}}]}}}},"responses":{"200":{"description":"The scan result. reachable is false when the domain couldn't be reached.","content":{"application/json":{"schema":{"type":"object","required":["reachable","host","scannedAt","ms"],"properties":{"reachable":{"type":"boolean"},"host":{"type":"string"},"scannedAt":{"type":"string","format":"date-time"},"ms":{"type":"integer"},"cached":{"type":"boolean"},"detail":{"type":"string","description":"Why the domain couldn't be reached"},"entryUrl":{"type":"string"},"homepage":{"type":"object"},"summary":{"type":"object","description":"Score, points and coverage; score is null when withheld"},"results":{"type":"array","items":{"type":"object","description":"One check: id, status, evidence"}},"timings":{"type":"object"}}}}}},"400":{"description":"Bad input: not JSON, an invalid domain, or an unknown board company","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}}},"429":{"description":"Too many live scans from your network, or too many rescans of this domain","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait"}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}}},"503":{"description":"Scanning is switched off, or the rate limit couldn't be checked; no scan ran","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}}}}}},"/api/checks":{"get":{"operationId":"listChecks","summary":"Every check, with a real example from whoever does it best on our boards","parameters":[{"name":"host","in":"query","description":"Add our hand notes on this site: what we found close to a fail, and what a pass doesn't prove. Repeat for up to 5.","schema":{"type":"string"}}],"responses":{"200":{"description":"The checks. example is null where nobody on our boards passes, or where the check has no page to show; each example has its own scannedAt, and examplesFrom is the oldest of them.","content":{"application/json":{"schema":{"type":"object","required":["examplesFrom","checks"],"properties":{"examplesFrom":{"type":"string","format":"date-time"},"checks":{"type":"array","items":{"type":"object","description":"id, title, headline, points, emailOnly, worth, example"}},"notes":{"type":"object","description":"By host: close holds what we found near a fail, aboutPass what a pass doesn't prove"}}}}}}}}}}}