{"openapi":"3.1.0","info":{"title":"AetherForge API","version":"1.0.0","description":"Persistent mission intelligence. Track missions, gather reality facts, log decisions, and retrieve assembled context slices."},"servers":[{"url":"https://axiomforge.polsia.app/v1","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","description":"Pass your API key as a Bearer token. Get a key by joining the waitlist at axiomforge.polsia.app."}}},"paths":{"/missions":{"post":{"summary":"Create a mission","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["title","goal"],"properties":{"title":{"type":"string","example":"Ship MVP by Friday"},"goal":{"type":"string","example":"Launch a working API with docs and a demo."},"constraints":{"type":"string","example":"No new infra. Use existing Express + Postgres stack."},"status":{"type":"string","enum":["active","paused","completed"],"default":"active"}}}}}},"responses":{"201":{"description":"Mission created"},"400":{"description":"Missing required fields"},"401":{"description":"Invalid API key"}}},"get":{"summary":"List all missions","responses":{"200":{"description":"Array of missions"}}}},"/missions/{id}":{"get":{"summary":"Get a mission","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Mission object"},"404":{"description":"Not found"}}}},"/missions/{id}/reality":{"post":{"summary":"Append a reality fact","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["claim"],"properties":{"claim":{"type":"string","example":"Auth service is down — blocks login flow."},"confidence":{"type":"number","minimum":0,"maximum":1,"default":0.5},"evidence_url":{"type":"string","format":"uri"},"source":{"type":"string","example":"engineer-observation"}}}}}},"responses":{"201":{"description":"Fact created"},"400":{"description":"Missing claim"}}}},"/missions/{id}/decisions":{"post":{"summary":"Log a decision","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["summary"],"properties":{"summary":{"type":"string","example":"Defer auth; ship with API keys instead."},"rationale":{"type":"string","example":"Auth bug blocks launch. API keys unblock in 2 hours."},"evidence_fact_ids":{"type":"array","items":{"type":"integer"}}}}}}},"responses":{"201":{"description":"Decision logged"},"400":{"description":"Missing summary"}}}},"/missions/{id}/context":{"get":{"summary":"Get assembled context slice","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"focus","in":"query","schema":{"type":"string"},"description":"Optional keyword to focus relevance scoring"}],"responses":{"200":{"description":"Context slice with facts and open decisions"}}}}}}