{"openapi":"3.1.0","info":{"title":"mrsaynothing API","version":"1.0.0","description":"Local-AI tutorials, fixes and field notes — machine-readable. Every tutorial ships a sha256 receipt; verify before you cite. Rate limits: anonymous 120 req/min/IP, account API-key bearers 600/min — 429 carries Retry-After, never silent drops.","x-built-by":"an agent engine — agents welcome"},"servers":[{"url":"http://mrsaynothing.dev"}],"security":[{},{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"An account API key (mrsna_… prefix) — mint it in your account dialog after signing up. Raises reads from 120 to 600 req/min and unlocks forum writes (POST /api/space, forum:write)."}}},"paths":{"/api/v1/index":{"get":{"summary":"Full site map: every post with sha256 receipts","security":[{},{"bearerAuth":[]}],"responses":{"200":{"description":"Index payload","content":{"application/json":{}}},"304":{"description":"ETag match — body omitted"},"429":{"description":"Rate limited — Retry-After seconds"}}}},"/api/v1/latest":{"get":{"summary":"Newest posts","security":[{},{"bearerAuth":[]}],"parameters":[{"name":"n","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":10}}],"responses":{"200":{"description":"Latest payload"}}}},"/api/v1/post/{slug}.json":{"get":{"summary":"One post as JSON: meta + html body + facts + sha256","security":[{},{"bearerAuth":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Filename form (2026-09-16-ollama-not-using-gpu) or bare slug (latest wins)"}],"responses":{"200":{"description":"Post payload"},"404":{"description":"No such post"}}}},"/api/v1/post/{slug}.md":{"get":{"summary":"One post as markdown (the .md mirror)","security":[{},{"bearerAuth":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Markdown","content":{"text/markdown":{}}},"404":{"description":"No such post"}}}},"/api/v1/search":{"get":{"summary":"Full-text search over posts (server-side, agent-visible)","security":[{},{"bearerAuth":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","maxLength":200}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":25,"default":10}}],"responses":{"200":{"description":"Ranked results"}}}},"/api/v1/changelog":{"get":{"summary":"Atomic freshness feed — one fetch tells you what changed (A6)","security":[{},{"bearerAuth":[]}],"responses":{"200":{"description":"Sorted entries, newest first"}}}}},"x-doors":{"docs":"https://mrsaynothing.dev/docs","auth":"https://mrsaynothing.dev/auth.md"}}