{"openapi":"3.1.0","info":{"title":"edwardtadros.com agent API","version":"1.0.0","description":"Public, rate-limited access to Edward Tadros's dossier and PROSPÆRO. Ask routes omit Turnstile so software agents can use them; AI Gateway spend limits are the outer wall."},"servers":[{"url":"https://edwardtadros.com"}],"paths":{"/api/search":{"get":{"summary":"Search the public knowledge dossier","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1},"example":"Wikimedia pipeline"},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":10,"default":5},"example":5}],"responses":{"200":{"description":"Ranked results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"},"example":{"query":"Wikimedia pipeline","mode":"lexical","results":[{"id":"gene-wikimedia-foundation","title":"Wikimedia Foundation — January 2019 to June 2026","score":0.93,"excerpt":"Edward designed and shipped an AI-augmented requirements and testing pipeline…","url":"/knowledge/gene-wikimedia-foundation.md"}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/ask":{"post":{"summary":"Ask PROSPÆRO a question about Edward","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["question"],"properties":{"question":{"type":"string","minLength":1,"maxLength":600}}},"example":{"question":"What has Edward delivered in regulated environments?"}}}},"responses":{"200":{"description":"A concise sourced answer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskResponse"},"example":{"question":"What has Edward delivered in regulated environments?","answer":"Edward has delivered in FDA, ISO, HIPAA-covered, and financial-services environments.","sources":[{"id":"gene-regulated-delivery","title":"Regulated delivery","url":"/knowledge/gene-regulated-delivery.md"}],"model":"anthropic/claude-sonnet-5","live":true,"latencyMs":320}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/prices":{"get":{"summary":"List configured model prices in USD","responses":{"200":{"description":"Current OpenRouter prices or the static fallback","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricesResponse"},"example":{"updatedAt":"2026-08-27T23:08:13.622Z","source":"openrouter","models":{"anthropic/claude-sonnet-5":{"in":2,"out":10}},"images":{"xai/grok-imagine-image-2.0":{"perImage":0.04},"openai/gpt-image-2":{"perImage":null}}}}}}}}},"/api/health":{"get":{"summary":"Inspect public Worker health and configuration","responses":{"200":{"description":"Health summary","content":{"application/json":{"schema":{"type":"object","required":["ok","documents","models","defaultModel","gateway"],"properties":{"ok":{"type":"boolean"},"documents":{"type":"integer"},"vectors":{"type":"boolean"},"models":{"type":"array","items":{"type":"string"}},"defaultModel":{"type":"string"},"imageModel":{"type":"string"},"gateway":{"type":"boolean"}}},"example":{"ok":true,"documents":12,"vectors":false,"models":["anthropic/claude-sonnet-5"],"defaultModel":"anthropic/claude-sonnet-5","imageModel":"xai/grok-imagine-image-2.0","gateway":true}}}}}}},"/knowledge/index.json":{"get":{"summary":"List public knowledge documents","responses":{"200":{"description":"Knowledge manifest","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeIndex"},"example":{"generated":"2026-08-27T23:08:13.622Z","documentCount":12,"documents":[{"id":"gene-capabilities","title":"Capabilities","category":"general","tags":["page"],"url":"/knowledge/gene-capabilities.md","chars":1051}]}}}}}}}},"components":{"responses":{"BadRequest":{"description":"Invalid or missing input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"bad_request"}}}},"RateLimited":{"description":"The per-IP agent rate limit was reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited"}}}}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}},"Source":{"type":"object","required":["id","title","url"],"properties":{"id":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"}}},"SearchResult":{"type":"object","required":["id","title","score","excerpt","url"],"properties":{"id":{"type":"string"},"title":{"type":"string"},"score":{"type":"number"},"excerpt":{"type":"string","maxLength":300},"url":{"type":"string"}}},"SearchResponse":{"type":"object","required":["query","mode","results"],"properties":{"query":{"type":"string"},"mode":{"type":"string","enum":["hybrid","lexical"]},"results":{"type":"array","items":{"$ref":"#/components/schemas/SearchResult"}}}},"AskResponse":{"type":"object","required":["question","answer","sources","model","live","latencyMs"],"properties":{"question":{"type":"string"},"answer":{"type":"string"},"sources":{"type":"array","items":{"$ref":"#/components/schemas/Source"}},"model":{"type":"string"},"live":{"type":"boolean"},"latencyMs":{"type":"integer","minimum":0}}},"ModelPrice":{"type":"object","required":["in","out"],"properties":{"in":{"type":"number","minimum":0},"out":{"type":"number","minimum":0}}},"PricesResponse":{"type":"object","required":["updatedAt","source","models","images"],"properties":{"updatedAt":{"type":"string","format":"date-time"},"source":{"type":"string","enum":["openrouter","static"]},"models":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ModelPrice"}},"images":{"type":"object","additionalProperties":{"type":"object","required":["perImage"],"properties":{"perImage":{"type":["number","null"]}}}}}},"KnowledgeDocument":{"type":"object","required":["id","title","category","tags","url","chars"],"properties":{"id":{"type":"string"},"title":{"type":"string"},"category":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"url":{"type":"string"},"chars":{"type":"integer","minimum":0}}},"KnowledgeIndex":{"type":"object","required":["generated","documentCount","documents"],"properties":{"generated":{"type":"string","format":"date-time"},"documentCount":{"type":"integer"},"documents":{"type":"array","items":{"$ref":"#/components/schemas/KnowledgeDocument"}}}}}}}