{"openapi":"3.1.0","info":{"title":"Atri API","description":"\nThe **Atri API** gives developers two surfaces:\n\n* **Compute** — calculate a full sidereal Vedic chart (ascendant, planets, houses, aspects,\n  conjunctions, Vimśottari daśās, yogas), synthesize a grounded reading, retrieve the classical\n  rules that apply to a chart, and geocode a birthplace.\n* **Corpus** — browse and search the classical-rules knowledge graph directly (by planet, house,\n  sign, yoga, or nakshatra), list yogas, and inspect the entity taxonomy.\n\n### Authentication\nEvery endpoint requires **either** an `X-API-Key` header **or** an\n`Authorization: Bearer <session>` token. Create keys from the developer console.\n\n### Corpus caveat\nRules are extracted from classical Sanskrit texts via OCR + LLM, are currently **uncited**\n(`source_id` only), and can be noisy — filter with `min_confidence`.\n","version":"1.0.0"},"paths":{"/api/reading":{"post":{"summary":"Generate Reading","operationId":"generate_reading_api_reading_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"tags":["Compute"]}},"/api/reading/stream":{"post":{"summary":"Stream Reading Endpoint","description":"SSE: emit the computed chart immediately, then stream the reading token-by-token, then save.","operationId":"stream_reading_endpoint_api_reading_stream_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"tags":["Compute"]}},"/api/chart":{"post":{"summary":"Get Chart Only","operationId":"get_chart_only_api_chart_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChartCalculationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChartCalculationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"tags":["Compute"]}},"/api/rules":{"post":{"summary":"Get Chart Rules","operationId":"get_chart_rules_api_rules_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RulesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RulesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"tags":["Compute"]}},"/api/geocode":{"get":{"summary":"Geocode Search","description":"Resolve a place name to candidate coordinates (server-side Nominatim) for the location autocomplete.","operationId":"geocode_search_api_geocode_get","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Compute"]}},"/api/corpus/rules":{"get":{"summary":"Corpus Rules Search","description":"Search the classical-rules corpus by entity. Provide at least one of planet,\nhouse, sign, yoga, nakshatra; combining them returns rules where all co-occur\n(e.g. ?planet=Venus&house=8).","operationId":"corpus_rules_search_api_corpus_rules_get","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"planet","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Planet"}},{"name":"house","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"House"}},{"name":"sign","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sign"}},{"name":"yoga","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Yoga"}},{"name":"nakshatra","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nakshatra"}},{"name":"rule_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Type"}},{"name":"min_confidence","in":"query","required":false,"schema":{"type":"number","default":0,"title":"Min Confidence"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Corpus"]}},"/api/corpus/yogas":{"get":{"summary":"Corpus Yogas List","description":"List classical yogas in the corpus, with how many rules each carries.","operationId":"corpus_yogas_list_api_corpus_yogas_get","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Corpus"]}},"/api/corpus/yogas/{name}":{"get":{"summary":"Corpus Yoga Detail","description":"Return the classical rules recorded for a named yoga.","operationId":"corpus_yoga_detail_api_corpus_yogas__name__get","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Corpus"]}},"/api/corpus/entities":{"get":{"summary":"Corpus Entity Taxonomy","description":"The queryable entity taxonomy: entity types with counts and example names.","operationId":"corpus_entity_taxonomy_api_corpus_entities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"tags":["Corpus"]}}},"components":{"schemas":{"ChartCalculationRequest":{"properties":{"name":{"type":"string","title":"Name"},"dob":{"type":"string","title":"Dob"},"tob":{"type":"string","title":"Tob"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"hp_website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hp Website","default":""}},"type":"object","required":["name","dob","tob"],"title":"ChartCalculationRequest"},"ChartCalculationResponse":{"properties":{"name":{"type":"string","title":"Name"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"ascendant":{"additionalProperties":true,"type":"object","title":"Ascendant"},"planets":{"additionalProperties":true,"type":"object","title":"Planets"},"dasha":{"additionalProperties":true,"type":"object","title":"Dasha"},"transits":{"additionalProperties":true,"type":"object","title":"Transits"},"conjunctions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Conjunctions"},"yogas":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Yogas"}},"type":"object","required":["name","metadata","ascendant","planets","dasha","transits","conjunctions","yogas"],"title":"ChartCalculationResponse"},"ChatMessage":{"properties":{"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"}},"type":"object","required":["role","content"],"title":"ChatMessage"},"ChatRequest":{"properties":{"chart_data":{"additionalProperties":true,"type":"object","title":"Chart Data"},"messages":{"items":{"$ref":"#/components/schemas/ChatMessage"},"type":"array","title":"Messages"},"hp_website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hp Website","default":""}},"type":"object","required":["chart_data","messages"],"title":"ChatRequest"},"ChatResponse":{"properties":{"reply":{"type":"string","title":"Reply"}},"type":"object","required":["reply"],"title":"ChatResponse"},"CreateKeyRequest":{"properties":{"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"CreateKeyRequest"},"CreateSessionRequest":{"properties":{"title":{"type":"string","title":"Title"}},"type":"object","required":["title"],"title":"CreateSessionRequest"},"GoogleLoginRequest":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"GoogleLoginRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ReadingRequest":{"properties":{"name":{"type":"string","title":"Name"},"dob":{"type":"string","title":"Dob"},"tob":{"type":"string","title":"Tob"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query","default":"Provide a comprehensive astrological reading covering my life themes, current periods, and transits."},"hp_website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hp Website","default":""}},"type":"object","required":["name","dob","tob"],"title":"ReadingRequest"},"ReadingResponse":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"name":{"type":"string","title":"Name"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"reading":{"type":"string","title":"Reading"},"rules_applied":{"items":{"type":"string"},"type":"array","title":"Rules Applied"},"chart_data":{"additionalProperties":true,"type":"object","title":"Chart Data"}},"type":"object","required":["name","metadata","reading","rules_applied","chart_data"],"title":"ReadingResponse"},"RulesRequest":{"properties":{"chart_data":{"additionalProperties":true,"type":"object","title":"Chart Data"},"hp_website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hp Website","default":""}},"type":"object","required":["chart_data"],"title":"RulesRequest"},"RulesResponse":{"properties":{"rules":{"items":{"type":"string"},"type":"array","title":"Rules"}},"type":"object","required":["rules"],"title":"RulesResponse"},"UserMessageRequest":{"properties":{"content":{"type":"string","title":"Content"}},"type":"object","required":["content"],"title":"UserMessageRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"},"HTTPBearer":{"type":"http","scheme":"bearer"}}},"tags":[{"name":"Compute","description":"Chart calculation, readings, chart-scoped rules, and geocoding."},{"name":"Corpus","description":"Browse & search the classical-rules knowledge graph."}]}