{"service":"Siteline","description":"AI agent readiness scanner for public websites.","conformance":"level-4","specUrl":"https://github.com/snapsynapse/graceful-boundaries","limits":{"scan":{"endpoint":"/api/scan","method":"GET","limits":[{"type":"ip-rate","maxRequests":10,"windowSeconds":3600,"description":"10 scans per IP per hour."},{"type":"resource-dedup","maxRequests":1,"windowSeconds":86400,"description":"One scan per submitted URL scope per calendar day. Repeat requests return the cached result."}],"note":"Cached results are returned with _rescanBlocked: true. The result is still valid and complete."},"resultLookup":{"endpoint":"/api/result","method":"GET","limits":[{"type":"ip-rate","maxRequests":60,"windowSeconds":60,"description":"60 lookups per IP per minute."}],"note":"Accepts result IDs (example-com-20260321 or example-com-pricing-a1b2c3d4-20260321) and domains (example.com) in the ?id= parameter."},"resultPage":{"endpoint":"/results/:id","method":"GET","limits":[{"type":"ip-rate","maxRequests":60,"windowSeconds":60,"description":"60 page loads per IP per minute."}],"note":"Server-rendered HTML with OG meta tags. Redirects to the SPA for interactive use."},"ogImage":{"endpoint":"/api/og","method":"GET","limits":[{"type":"ip-rate","maxRequests":30,"windowSeconds":60,"description":"30 image generations per IP per minute."}]},"emailCapture":{"endpoint":"/api/email-capture","method":"POST","limits":[{"type":"ip-rate","maxRequests":12,"windowSeconds":3600,"description":"12 submissions per IP per hour."},{"type":"pdf-cooldown","maxRequests":1,"windowSeconds":60,"description":"1 report email per IP per 60 seconds (for source: pdf-export)."}]}},"ssrfProtection":{"description":"The scan endpoint blocks private, reserved, and internal network addresses.","blocked":["Private IPv4 ranges (10.x, 172.16-31.x, 192.168.x)","Loopback (127.x, localhost, ::1)","Link-local and cloud metadata (169.254.x, metadata.google.internal)","Internal hostnames (*.internal, *.local)","Non-standard ports (only 80 and 443 allowed)","Unsafe redirect targets that resolve to blocked hosts"]},"responseHeaders":{"Retry-After":"Seconds to wait before retrying (present on 429 responses).","X-Siteline-Cache":"HIT, KV_HIT, or MISS — indicates whether the result was cached.","X-Siteline-Request-Id":"Unique request identifier for debugging."},"links":{"scanner":"https://siteline.to/","api":"https://siteline.to/api/scan?url=example.com","limits":"https://siteline.to/api/limits","rubric":"Use the MCP server or CLI: siteline rubric"}}