{"openapi":"3.1.0","info":{"title":"BDA Jyotish + Panchang Service","description":"Swiss-Ephemeris-backed Panchang and Jyotish computation. Every response carries a methodology fingerprint. Public unauthenticated access is for low-volume evaluation; commercial, high-volume, and reseller API access requires a written agreement. Response-level license and provenance metadata remain authoritative. Source: Bharat Dharma Academy (https://www.bda.ai).","contact":{"name":"Bharat Dharma Academy API enquiries","url":"https://www.bda.ai/contact-us"},"license":{"name":"CC-BY-SA-4.0 where identified in response metadata","url":"https://creativecommons.org/licenses/by-sa/4.0/"},"version":"0.1.0"},"paths":{"/api/v1/wix-external-db/temple-poc/provision":{"post":{"tags":["wix-external-db"],"summary":"Provision","operationId":"provision_api_v1_wix_external_db_temple_poc_provision_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Provision Api V1 Wix External Db Temple Poc Provision Post"}}}}}}},"/api/v1/wix-external-db/temple-poc/schemas/list":{"post":{"tags":["wix-external-db"],"summary":"Legacy Schemas List","operationId":"legacy_schemas_list_api_v1_wix_external_db_temple_poc_schemas_list_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Legacy Schemas List Api V1 Wix External Db Temple Poc Schemas List Post"}}}}}}},"/api/v1/wix-external-db/temple-poc/schemas/find":{"post":{"tags":["wix-external-db"],"summary":"Legacy Schemas Find","operationId":"legacy_schemas_find_api_v1_wix_external_db_temple_poc_schemas_find_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Legacy Schemas Find Api V1 Wix External Db Temple Poc Schemas Find Post"}}}}}}},"/api/v1/wix-external-db/temple-poc/data/find":{"post":{"tags":["wix-external-db"],"summary":"Legacy Data Find","operationId":"legacy_data_find_api_v1_wix_external_db_temple_poc_data_find_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Legacy Data Find Api V1 Wix External Db Temple Poc Data Find Post"}}}}}}},"/api/v1/wix-external-db/temple-poc/data/get":{"post":{"tags":["wix-external-db"],"summary":"Legacy Data Get","operationId":"legacy_data_get_api_v1_wix_external_db_temple_poc_data_get_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Legacy Data Get Api V1 Wix External Db Temple Poc Data Get Post"}}}}}}},"/api/v1/wix-external-db/temple-poc/data/count":{"post":{"tags":["wix-external-db"],"summary":"Legacy Data Count","operationId":"legacy_data_count_api_v1_wix_external_db_temple_poc_data_count_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Legacy Data Count Api V1 Wix External Db Temple Poc Data Count Post"}}}}}}},"/api/v1/wix-external-db/temple-poc/data/insert":{"post":{"tags":["wix-external-db"],"summary":" Write Not Supported","operationId":"_write_not_supported_api_v1_wix_external_db_temple_poc_data_insert_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"null","title":"Response  Write Not Supported Api V1 Wix External Db Temple Poc Data Insert Post"}}}}}}},"/api/v1/wix-external-db/temple-poc/data/update":{"post":{"tags":["wix-external-db"],"summary":" Write Not Supported","operationId":"_write_not_supported_api_v1_wix_external_db_temple_poc_data_update_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"null","title":"Response  Write Not Supported Api V1 Wix External Db Temple Poc Data Update Post"}}}}}}},"/api/v1/wix-external-db/temple-poc/data/remove":{"post":{"tags":["wix-external-db"],"summary":" Write Not Supported","operationId":"_write_not_supported_api_v1_wix_external_db_temple_poc_data_remove_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"null","title":"Response  Write Not Supported Api V1 Wix External Db Temple Poc Data Remove Post"}}}}}}},"/api/v1/wix-external-db/temple-poc/v3/capabilities/get":{"post":{"tags":["wix-external-db"],"summary":"Capabilities Get","operationId":"capabilities_get_api_v1_wix_external_db_temple_poc_v3_capabilities_get_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Capabilities Get Api V1 Wix External Db Temple Poc V3 Capabilities Get Post"}}}}}}},"/api/v1/wix-external-db/temple-poc/v3/collections/get":{"post":{"tags":["wix-external-db"],"summary":"Collections Get","operationId":"collections_get_api_v1_wix_external_db_temple_poc_v3_collections_get_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Collections Get Api V1 Wix External Db Temple Poc V3 Collections Get Post"}}}}}}},"/api/v1/wix-external-db/temple-poc/v3/items/query":{"post":{"tags":["wix-external-db"],"summary":"Items Query","operationId":"items_query_api_v1_wix_external_db_temple_poc_v3_items_query_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Items Query Api V1 Wix External Db Temple Poc V3 Items Query Post"}}}}}}},"/api/v1/wix-external-db/temple-poc/v3/items/count":{"post":{"tags":["wix-external-db"],"summary":"Items Count","operationId":"items_count_api_v1_wix_external_db_temple_poc_v3_items_count_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Items Count Api V1 Wix External Db Temple Poc V3 Items Count Post"}}}}}}},"/api/v1/wix-external-db/temple-poc/v3/items/insert":{"post":{"tags":["wix-external-db"],"summary":" Write Not Supported","operationId":"_write_not_supported_api_v1_wix_external_db_temple_poc_v3_items_insert_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"null","title":"Response  Write Not Supported Api V1 Wix External Db Temple Poc V3 Items Insert Post"}}}}}}},"/api/v1/wix-external-db/temple-poc/v3/items/update":{"post":{"tags":["wix-external-db"],"summary":" Write Not Supported","operationId":"_write_not_supported_api_v1_wix_external_db_temple_poc_v3_items_update_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"null","title":"Response  Write Not Supported Api V1 Wix External Db Temple Poc V3 Items Update Post"}}}}}}},"/api/v1/wix-external-db/temple-poc/v3/items/remove":{"post":{"tags":["wix-external-db"],"summary":" Write Not Supported","operationId":"_write_not_supported_api_v1_wix_external_db_temple_poc_v3_items_remove_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"null","title":"Response  Write Not Supported Api V1 Wix External Db Temple Poc V3 Items Remove Post"}}}}}}},"/api/v1/wix-external-db/temple-poc/v3/items/truncate":{"post":{"tags":["wix-external-db"],"summary":" Write Not Supported","operationId":"_write_not_supported_api_v1_wix_external_db_temple_poc_v3_items_truncate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"null","title":"Response  Write Not Supported Api V1 Wix External Db Temple Poc V3 Items Truncate Post"}}}}}}},"/ai-sitemap.json":{"get":{"tags":["Discovery"],"summary":"Ai Sitemap Json","operationId":"ai_sitemap_json_ai_sitemap_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/mcp/tools.json":{"get":{"tags":["Discovery"],"summary":"Mcp Public Tools Json","operationId":"mcp_public_tools_json_mcp_tools_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/mcp":{"post":{"tags":["Discovery"],"summary":"Mcp Json Rpc","description":"Public read-only MCP-style JSON-RPC transport.\n\nThis is intentionally limited to public tools. Authenticated user Kundali,\ndashboard summary, saved reports, and birth-detail update tools remain\nreserved and are not callable through this endpoint.","operationId":"mcp_json_rpc_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/a2a/agent-card.json":{"get":{"tags":["Discovery"],"summary":"A2A Agent Card Json","operationId":"a2a_agent_card_json_a2a_agent_card_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/agent-card.json":{"get":{"tags":["Discovery"],"summary":"A2A Agent Card Well Known Json","operationId":"a2a_agent_card_well_known_json__well_known_agent_card_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/agent.json":{"get":{"tags":["Discovery"],"summary":"A2A Agent Json Compat","operationId":"a2a_agent_json_compat__well_known_agent_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health","description":"Liveness probe — MUST stay trivial. Declared `async def` with zero\nawaits so it is served directly on the event loop and never depends on\nthe (potentially saturated) sync threadpool. It touches no ephemeris,\nDB, Qdrant, or AI provider. (Architecture.md §22.124)","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/encyclopedia/temple_count":{"get":{"summary":"Api V1 Encyclopedia Temple Count","operationId":"api_v1_encyclopedia_temple_count_api_v1_encyclopedia_temple_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/seo/blog_sitemap_meta":{"get":{"summary":"Api V1 Seo Blog Sitemap Meta","description":"Public metadata for the canonical BDA blog sitemap shards.","operationId":"api_v1_seo_blog_sitemap_meta_api_v1_seo_blog_sitemap_meta_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/seo/blog_sitemap.xml":{"get":{"summary":"Api V1 Seo Blog Sitemap Xml","description":"Canonical public blog sitemap shard.\n\nEmits only public blog URLs and optional lastmod dates; no internal IDs or\nauthor/profile data leave the service.","operationId":"api_v1_seo_blog_sitemap_xml_api_v1_seo_blog_sitemap_xml_get","parameters":[{"name":"shard","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Shard"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":5000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/client_logs":{"post":{"summary":"Client Logs Ingest","operationId":"client_logs_ingest_api_v1_client_logs_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/client_logs/recent":{"get":{"summary":"Client Logs Recent","operationId":"client_logs_recent_api_v1_client_logs_recent_get","parameters":[{"name":"since_minutes","in":"query","required":false,"schema":{"type":"integer","maximum":10080,"minimum":1,"default":60,"title":"Since Minutes"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Level"}},{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/client_logs/purge":{"post":{"summary":"Client Logs Purge","operationId":"client_logs_purge_api_v1_client_logs_purge_post","parameters":[{"name":"older_than_days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":7,"title":"Older Than Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/shell":{"get":{"summary":"Shell","description":"Single-page Panchang UI — the iframe content used by www.bda.ai/panchang.","operationId":"shell_shell_get","parameters":[{"name":"variant","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang":{"get":{"summary":"Panchang Root","description":"Alias for /shell — same UI, easier URL.","operationId":"panchang_root_panchang_get","parameters":[{"name":"variant","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang-prototype":{"get":{"summary":"Panchang Prototype","description":"Dark Panchang candidate built from the approved prototypes.","operationId":"panchang_prototype_panchang_prototype_get","parameters":[{"name":"variant","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user-dashboard":{"get":{"summary":"User Dashboard Root","description":"Personalized Maa Kali dashboard — production page.\n\nSame header policy as /shell: permissive frame-ancestors so Wix can\niframe-embed when needed; permissive CORS so the page can hit the\nUniversal Agent `/start` route from any origin during local dev.","operationId":"user_dashboard_root_user_dashboard_get","parameters":[{"name":"variant","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user-dashboard-prototype":{"get":{"summary":"User Dashboard Prototype","description":"Dark dashboard candidate built from the approved v2 prototypes.","operationId":"user_dashboard_prototype_user_dashboard_prototype_get","parameters":[{"name":"variant","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/daily":{"get":{"summary":"Panchang Daily","description":"Full daily Panchang for a city × date × profile.\n\nReturns sunrise/sunset/moonrise/moonset, tithi, nakshatra, yoga, karana,\npaksha, lunar month, samvats, moonsign/sunsign, auspicious +\ninauspicious windows, Choghadiya, and methodology fingerprint.\n\nThe response is gzip-negotiated via the audited\n``_json_response_maybe_gzip`` helper (compressed only when the client sends\n``Accept-Encoding: gzip`` and the body clears the size threshold);\ndecompressed it is byte-identical to the plain JSON dict. The compute lives\nin ``_panchang_daily_dict`` so the internal ``/panchang/choghadiya`` caller\ngets the plain dict, unaffected by the route's transport encoding.","operationId":"panchang_daily_panchang_daily_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"description":"Latitude in decimal degrees","title":"Lat"},"description":"Latitude in decimal degrees"},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"description":"Longitude in decimal degrees","title":"Lng"},"description":"Longitude in decimal degrees"},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Local date for the Panchang day (YYYY-MM-DD)","title":"Date"},"description":"Local date for the Panchang day (YYYY-MM-DD)"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone (auto-resolved from lat/lng if omitted)","title":"Tz"},"description":"IANA timezone (auto-resolved from lat/lng if omitted)"},{"name":"elevation_m","in":"query","required":false,"schema":{"type":"number","description":"Observer elevation in meters","default":0.0,"title":"Elevation M"},"description":"Observer elevation in meters"},{"name":"profile","in":"query","required":false,"schema":{"type":"string","description":"Regional profile","default":"north_india_purnimanta","title":"Profile"},"description":"Regional profile"},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","description":"Sidereal ayanamsa: lahiri|raman|krishnamurti|true_chitra","default":"lahiri","title":"Ayanamsa"},"description":"Sidereal ayanamsa: lahiri|raman|krishnamurti|true_chitra"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/tithis":{"get":{"summary":"Panchang Tithi Catalog","description":"Canonical 30-Tithi catalog for API, SEO and external-agent reuse.","operationId":"panchang_tithi_catalog_panchang_tithis_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/panchang/tithi/{tithi_slug}":{"get":{"summary":"Panchang Tithi Calendar","description":"Annual astronomical start/end spans for one Tithi.\n\nCoordinates are mandatory so this public contract never silently assumes a\nuser's location. The result is factual Moon-Sun elongation timing only; it\ndoes not select a festival, Vrat, Parana or Muhurta observance date.","operationId":"panchang_tithi_calendar_panchang_tithi__tithi_slug__get","parameters":[{"name":"tithi_slug","in":"path","required":true,"schema":{"type":"string","title":"Tithi Slug"}},{"name":"year","in":"query","required":true,"schema":{"type":"integer","maximum":2100,"minimum":1900,"title":"Year"}},{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"description":"Latitude in decimal degrees","title":"Lat"},"description":"Latitude in decimal degrees"},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"description":"Longitude in decimal degrees","title":"Lng"},"description":"Longitude in decimal degrees"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Timezone hint; coordinates remain authoritative","title":"Tz"},"description":"Timezone hint; coordinates remain authoritative"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/details":{"get":{"summary":"Panchang Details","description":"Lazy deep-detail projection of the canonical daily Panchang packet.","operationId":"panchang_details_panchang_details_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"description":"Latitude in decimal degrees","title":"Lat"},"description":"Latitude in decimal degrees"},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"description":"Longitude in decimal degrees","title":"Lng"},"description":"Longitude in decimal degrees"},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Local Panchang date (YYYY-MM-DD)","title":"Date"},"description":"Local Panchang date (YYYY-MM-DD)"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Timezone hint; coordinates remain authoritative","title":"Tz"},"description":"Timezone hint; coordinates remain authoritative"},{"name":"elevation_m","in":"query","required":false,"schema":{"type":"number","default":0.0,"title":"Elevation M"}},{"name":"profile","in":"query","required":false,"schema":{"type":"string","default":"north_india_purnimanta","title":"Profile"}},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","default":"lahiri","title":"Ayanamsa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/comments":{"get":{"summary":"Panchang Comments","description":"Public read contract: approved positive comments only.","operationId":"panchang_comments_panchang_comments_get","parameters":[{"name":"page_key","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":180,"title":"Page Key"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Panchang Comment Submit","description":"AI-moderate first; publish only high-confidence positive feedback.","operationId":"panchang_comment_submit_panchang_comments_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PanchangCommentRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/utility":{"get":{"summary":"Panchang Utility","description":"Daily utility pack exposing already-implemented Panchang/Jyotish lanes.\n\nThis is the endpoint-strategy v1 contract from the research report: no new\nmath, no Supabase/Qdrant reads, one stable API shape for dashboard, Ask Maa\nKali, emails, MCP/AI consumption, and future atomized endpoints. Heavy scans\nstay opt-in so the default remains safe for public and crawler traffic.","operationId":"panchang_utility_panchang_utility_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"description":"Latitude in decimal degrees","title":"Lat"},"description":"Latitude in decimal degrees"},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"description":"Longitude in decimal degrees","title":"Lng"},"description":"Longitude in decimal degrees"},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Local date for the utility pack (YYYY-MM-DD)","title":"Date"},"description":"Local date for the utility pack (YYYY-MM-DD)"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone (auto-resolved from lat/lng if omitted)","title":"Tz"},"description":"IANA timezone (auto-resolved from lat/lng if omitted)"},{"name":"elevation_m","in":"query","required":false,"schema":{"type":"number","description":"Observer elevation in meters","default":0.0,"title":"Elevation M"},"description":"Observer elevation in meters"},{"name":"profile","in":"query","required":false,"schema":{"type":"string","description":"Regional Panchang profile","default":"north_india_purnimanta","title":"Profile"},"description":"Regional Panchang profile"},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","description":"Sidereal ayanamsa: lahiri|raman|krishnamurti|true_chitra","default":"lahiri","title":"Ayanamsa"},"description":"Sidereal ayanamsa: lahiri|raman|krishnamurti|true_chitra"},{"name":"natal_moon_rashi_idx","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":11,"minimum":0},{"type":"null"}],"description":"0-based natal Moon rashi index for personal Chandrabalam","title":"Natal Moon Rashi Idx"},"description":"0-based natal Moon rashi index for personal Chandrabalam"},{"name":"natal_lagna","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Natal lagna rashi name for gemstone lookup","title":"Natal Lagna"},"description":"Natal lagna rashi name for gemstone lookup"},{"name":"natal_nakshatra_idx","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":26,"minimum":0},{"type":"null"}],"description":"0-based natal nakshatra index for Tara Bala and birthstar utilities","title":"Natal Nakshatra Idx"},"description":"0-based natal nakshatra index for Tara Bala and birthstar utilities"},{"name":"include_windows","in":"query","required":false,"schema":{"type":"boolean","description":"Include Hora and Gowri daily windows","default":true,"title":"Include Windows"},"description":"Include Hora and Gowri daily windows"},{"name":"include_ephemeris_scans","in":"query","required":false,"schema":{"type":"boolean","description":"Include retrograde, combustion, ingress, eclipse, and seasonal scans","default":false,"title":"Include Ephemeris Scans"},"description":"Include retrograde, combustion, ingress, eclipse, and seasonal scans"},{"name":"include_lagna_table","in":"query","required":false,"schema":{"type":"boolean","description":"Include the 12-lagna transition table","default":false,"title":"Include Lagna Table"},"description":"Include the 12-lagna transition table"},{"name":"compact","in":"query","required":false,"schema":{"type":"boolean","description":"Return compact window sections suitable for dashboards and feeds","default":true,"title":"Compact"},"description":"Return compact window sections suitable for dashboards and feeds"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/calendar/traditions":{"get":{"summary":"Calendar Traditions","operationId":"calendar_traditions_calendar_traditions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/inauspicious-windows":{"get":{"summary":"Inauspicious Windows","operationId":"inauspicious_windows_inauspicious_windows_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Local date (YYYY-MM-DD)","title":"Date"},"description":"Local date (YYYY-MM-DD)"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone; auto-resolved if omitted","title":"Tz"},"description":"IANA timezone; auto-resolved if omitted"},{"name":"elevation_m","in":"query","required":false,"schema":{"type":"number","description":"Observer elevation in meters","default":0.0,"title":"Elevation M"},"description":"Observer elevation in meters"},{"name":"profile","in":"query","required":false,"schema":{"type":"string","description":"Regional Panchang profile","default":"north_india_purnimanta","title":"Profile"},"description":"Regional Panchang profile"},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","description":"Sidereal ayanamsa","default":"lahiri","title":"Ayanamsa"},"description":"Sidereal ayanamsa"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sankranti/all":{"get":{"summary":"Sankranti All","operationId":"sankranti_all_sankranti_all_get","parameters":[{"name":"year","in":"query","required":true,"schema":{"type":"integer","maximum":2100,"minimum":1900,"title":"Year"}},{"name":"tz","in":"query","required":false,"schema":{"type":"string","description":"IANA timezone for local display","default":"Asia/Kolkata","title":"Tz"},"description":"IANA timezone for local display"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/hora":{"get":{"summary":"Panchang Hora","operationId":"panchang_hora_panchang_hora_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Local date (YYYY-MM-DD)","title":"Date"},"description":"Local date (YYYY-MM-DD)"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone; auto-resolved if omitted","title":"Tz"},"description":"IANA timezone; auto-resolved if omitted"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/chandrabalam":{"get":{"summary":"Panchang Chandrabalam","operationId":"panchang_chandrabalam_panchang_chandrabalam_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Local date (YYYY-MM-DD)","title":"Date"},"description":"Local date (YYYY-MM-DD)"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone; auto-resolved if omitted","title":"Tz"},"description":"IANA timezone; auto-resolved if omitted"},{"name":"natal_moon_rashi_idx","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":11,"minimum":0},{"type":"null"}],"title":"Natal Moon Rashi Idx"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/tarabalam":{"get":{"summary":"Panchang Tarabalam","description":"Public birth-star matrix; personal projection stays in authenticated flows.","operationId":"panchang_tarabalam_panchang_tarabalam_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Local date (YYYY-MM-DD)","title":"Date"},"description":"Local date (YYYY-MM-DD)"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone; auto-resolved if omitted","title":"Tz"},"description":"IANA timezone; auto-resolved if omitted"},{"name":"elevation_m","in":"query","required":false,"schema":{"type":"number","description":"Observer elevation in meters","default":0.0,"title":"Elevation M"},"description":"Observer elevation in meters"},{"name":"profile","in":"query","required":false,"schema":{"type":"string","description":"Regional Panchang profile","default":"north_india_purnimanta","title":"Profile"},"description":"Regional Panchang profile"},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","description":"Sidereal ayanamsa","default":"lahiri","title":"Ayanamsa"},"description":"Sidereal ayanamsa"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/retrogrades":{"get":{"summary":"Panchang Retrogrades","operationId":"panchang_retrogrades_panchang_retrogrades_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"UTC date for the noon ephemeris snapshot","title":"Date"},"description":"UTC date for the noon ephemeris snapshot"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/combustions":{"get":{"summary":"Panchang Combustions","operationId":"panchang_combustions_panchang_combustions_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"UTC date for the noon ephemeris snapshot","title":"Date"},"description":"UTC date for the noon ephemeris snapshot"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/next-transits":{"get":{"summary":"Panchang Next Transits","operationId":"panchang_next_transits_panchang_next_transits_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date for ingress scan","title":"Date"},"description":"Start date for ingress scan"},{"name":"planet","in":"query","required":false,"schema":{"type":"string","description":"Planet key, e.g. saturn|jupiter|mars","default":"saturn","title":"Planet"},"description":"Planet key, e.g. saturn|jupiter|mars"},{"name":"horizon_days","in":"query","required":false,"schema":{"type":"integer","maximum":3660,"minimum":1,"default":365,"title":"Horizon Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/eclipses":{"get":{"summary":"Panchang Eclipses","operationId":"panchang_eclipses_panchang_eclipses_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date for eclipse scan","title":"Date"},"description":"Start date for eclipse scan"},{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":0.0,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":0.0,"title":"Lng"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/ritu":{"get":{"summary":"Panchang Ritu","operationId":"panchang_ritu_panchang_ritu_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Local date (YYYY-MM-DD)","title":"Date"},"description":"Local date (YYYY-MM-DD)"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"}},{"name":"elevation_m","in":"query","required":false,"schema":{"type":"number","default":0.0,"title":"Elevation M"}},{"name":"profile","in":"query","required":false,"schema":{"type":"string","default":"north_india_purnimanta","title":"Profile"}},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","default":"lahiri","title":"Ayanamsa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/solstice-equinox":{"get":{"summary":"Panchang Solstice Equinox","operationId":"panchang_solstice_equinox_panchang_solstice_equinox_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date for the seasonal scan","title":"Date"},"description":"Start date for the seasonal scan"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/panchaka":{"get":{"summary":"Panchang Panchaka","operationId":"panchang_panchaka_panchang_panchaka_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Local date (YYYY-MM-DD)","title":"Date"},"description":"Local date (YYYY-MM-DD)"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"}},{"name":"elevation_m","in":"query","required":false,"schema":{"type":"number","default":0.0,"title":"Elevation M"}},{"name":"profile","in":"query","required":false,"schema":{"type":"string","default":"north_india_purnimanta","title":"Profile"}},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","default":"lahiri","title":"Ayanamsa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/pradosham":{"get":{"summary":"Panchang Pradosham","operationId":"panchang_pradosham_panchang_pradosham_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Local date (YYYY-MM-DD)","title":"Date"},"description":"Local date (YYYY-MM-DD)"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"}},{"name":"elevation_m","in":"query","required":false,"schema":{"type":"number","default":0.0,"title":"Elevation M"}},{"name":"profile","in":"query","required":false,"schema":{"type":"string","default":"north_india_purnimanta","title":"Profile"}},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","default":"lahiri","title":"Ayanamsa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/gowri":{"get":{"summary":"Panchang Gowri","operationId":"panchang_gowri_panchang_gowri_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Local date (YYYY-MM-DD)","title":"Date"},"description":"Local date (YYYY-MM-DD)"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone; auto-resolved if omitted","title":"Tz"},"description":"IANA timezone; auto-resolved if omitted"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/muhurat/vehicle":{"get":{"summary":"Muhurat Vehicle","operationId":"muhurat_vehicle_muhurat_vehicle_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Local date (YYYY-MM-DD)","title":"Date"},"description":"Local date (YYYY-MM-DD)"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"}},{"name":"elevation_m","in":"query","required":false,"schema":{"type":"number","default":0.0,"title":"Elevation M"}},{"name":"profile","in":"query","required":false,"schema":{"type":"string","default":"north_india_purnimanta","title":"Profile"}},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","default":"lahiri","title":"Ayanamsa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lagna/table":{"get":{"summary":"Lagna Table","operationId":"lagna_table_lagna_table_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Local date (YYYY-MM-DD)","title":"Date"},"description":"Local date (YYYY-MM-DD)"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone; auto-resolved if omitted","title":"Tz"},"description":"IANA timezone; auto-resolved if omitted"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/birthstar/deity":{"get":{"summary":"Birthstar Deity","operationId":"birthstar_deity_birthstar_deity_get","parameters":[{"name":"nakshatra_idx","in":"query","required":true,"schema":{"type":"integer","maximum":26,"minimum":0,"description":"0-based nakshatra index","title":"Nakshatra Idx"},"description":"0-based nakshatra index"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/baby-name/syllables":{"get":{"summary":"Baby Name Syllables","operationId":"baby_name_syllables_baby_name_syllables_get","parameters":[{"name":"nakshatra_idx","in":"query","required":true,"schema":{"type":"integer","maximum":26,"minimum":0,"description":"0-based nakshatra index","title":"Nakshatra Idx"},"description":"0-based nakshatra index"},{"name":"pada","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":4,"minimum":1},{"type":"null"}],"title":"Pada"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/gemstone/recommendation":{"get":{"summary":"Gemstone Recommendation","operationId":"gemstone_recommendation_gemstone_recommendation_get","parameters":[{"name":"lagna","in":"query","required":true,"schema":{"type":"string","description":"Natal lagna rashi name, e.g. Leo","title":"Lagna"},"description":"Natal lagna rashi name, e.g. Leo"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/rudraksha/recommendation":{"get":{"summary":"Rudraksha Recommendation","operationId":"rudraksha_recommendation_rudraksha_recommendation_get","parameters":[{"name":"nakshatra_idx","in":"query","required":true,"schema":{"type":"integer","maximum":26,"minimum":0,"description":"0-based nakshatra index","title":"Nakshatra Idx"},"description":"0-based nakshatra index"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/rashifal":{"get":{"summary":"Panchang Rashifal","description":"Daily Chandra-rashi gochar guidance for all 12 signs.\n\nDeterministic only: real ephemeris + fixed bhava significations. This is\ngeneral sign-level guidance, not a personal birth-chart prediction.\n\nThe response (~53 KB, the largest still-uncompressed client-critical Panchang\npayload) is gzip-negotiated via the audited ``_json_response_maybe_gzip``\nhelper (compressed only when the client sends ``Accept-Encoding: gzip`` and\nthe body clears the size threshold); decompressed it is byte-identical to the\nplain JSON dict. This route has no internal callers, so it wraps its returns\ndirectly — no compute/route split is needed.","operationId":"panchang_rashifal_panchang_rashifal_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"description":"Latitude in decimal degrees","title":"Lat"},"description":"Latitude in decimal degrees"},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"description":"Longitude in decimal degrees","title":"Lng"},"description":"Longitude in decimal degrees"},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Local date for the Rashifal day (YYYY-MM-DD)","title":"Date"},"description":"Local date for the Rashifal day (YYYY-MM-DD)"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone (auto-resolved from lat/lng if omitted)","title":"Tz"},"description":"IANA timezone (auto-resolved from lat/lng if omitted)"},{"name":"elevation_m","in":"query","required":false,"schema":{"type":"number","description":"Observer elevation in meters","default":0.0,"title":"Elevation M"},"description":"Observer elevation in meters"},{"name":"profile","in":"query","required":false,"schema":{"type":"string","description":"Regional Panchang profile","default":"north_india_purnimanta","title":"Profile"},"description":"Regional Panchang profile"},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","description":"Sidereal ayanamsa: lahiri|raman|krishnamurti|true_chitra","default":"lahiri","title":"Ayanamsa"},"description":"Sidereal ayanamsa: lahiri|raman|krishnamurti|true_chitra"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/transits":{"get":{"summary":"Panchang Transits","description":"Stateless slow-graha Gochar scan for public SEO pages.\n\nThe response is gzip-negotiated via the audited ``_json_response_maybe_gzip``\nhelper (compressed only when the client advertises ``Accept-Encoding: gzip``);\nthe decompressed body is byte-identical to the prior plain-dict return, so the\npublic SEO contract is unchanged.","operationId":"panchang_transits_panchang_transits_get","parameters":[{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"UTC start date for the gochar scan (YYYY-MM-DD)","title":"From Date"},"description":"UTC start date for the gochar scan (YYYY-MM-DD)"},{"name":"window_days","in":"query","required":false,"schema":{"type":"integer","maximum":1100,"minimum":1,"description":"Forward scan window in days","default":370,"title":"Window Days"},"description":"Forward scan window in days"},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","description":"Sidereal ayanamsa: lahiri|raman|krishnamurti|true_chitra","default":"lahiri","title":"Ayanamsa"},"description":"Sidereal ayanamsa: lahiri|raman|krishnamurti|true_chitra"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jyotish/concepts":{"get":{"summary":"Jyotish Concepts Index","description":"Index of the evergreen jyotish concept pages (slug + title + summary).\n\nRead-only, deterministic, no birth data. Source for the Velo concept-page\nsync. Phase 1 = computed-factual concepts only (definitions/mechanism), every\nstructural fact sourced from the canonical engine constants.\n\nThe index aggregates every concept summary, so the response is\ngzip-negotiated via the audited `_json_response_maybe_gzip` helper: the\nDECOMPRESSED body is byte-identical to the old `return {...}` path (no\ncontract/field/value change), and clients that do not advertise\n`Accept-Encoding: gzip` (or tiny payloads) get the unchanged JSON body. This\nis a read-only SEO/AEO + Velo-sync surface, so transport compression only\nspeeds crawl/sync; it carries no PII and reflects no request input.","operationId":"jyotish_concepts_index_jyotish_concepts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/jyotish/concepts/{slug}":{"get":{"summary":"Jyotish Concept Detail","description":"Full structured content for one jyotish concept page, by slug.\n\nThe per-concept payload is the heaviest read-only SEO/AEO concept surface\n(full definition + mechanism + structured facts), fetched by the Velo\nconcept-page sync and answer-engine crawlers, so its 200 response is\ngzip-negotiated via the audited `_json_response_maybe_gzip` helper: the\nDECOMPRESSED body is byte-identical to the old `return concept` path, and\nthe 404 (unknown slug) path is unchanged. No PII; no reflected request input.","operationId":"jyotish_concept_detail_jyotish_concepts__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/month":{"get":{"summary":"Panchang Month","description":"Real per-day Panchang for every day of a month — powers the calendar\ngrid. Per day: tithi (number + name), nakshatra, paksha, sunrise.\nIn-process cached per (month, city) since it never changes.\n\nThe full-month grid is the heaviest public Panchang JSON payload (28-31\ndays x tithi/nakshatra/paksha/lunar-month + festival/vrat markers), so the\nresponse is gzip-negotiated via the audited `_json_response_maybe_gzip`\nhelper: the DECOMPRESSED body is byte-identical to the old `return out`\npath (no contract/field/value change), and clients that do not advertise\n`Accept-Encoding: gzip` (or tiny payloads) get the unchanged JSON body.\nThe in-process `_MONTH_CACHE` still stores the plain dict; the wrapper runs\nper request on both the cache-hit and freshly-built return paths. Each day\nalso uses the canonical exact-key daily memo, so the Today request and this\nmonth packet share the selected day's ephemeris result instead of computing\nit twice.","operationId":"panchang_month_panchang_month_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"ym","in":"query","required":true,"schema":{"type":"string","description":"Month as YYYY-MM","title":"Ym"},"description":"Month as YYYY-MM"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"}},{"name":"profile","in":"query","required":false,"schema":{"type":"string","default":"north_india_purnimanta","title":"Profile"}},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","default":"lahiri","title":"Ayanamsa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sunrise":{"get":{"summary":"Sunrise Endpoint","operationId":"sunrise_endpoint_sunrise_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Date"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"}},{"name":"elevation_m","in":"query","required":false,"schema":{"type":"number","default":0.0,"title":"Elevation M"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/choghadiya":{"get":{"summary":"Choghadiya Endpoint","description":"16-period Choghadiya for a city × date.\n\nThe 16-period Choghadiya block is a real multi-KB API payload (~2.7 KB), so\nthe response is gzip-negotiated via the audited ``_json_response_maybe_gzip``\nhelper: the DECOMPRESSED body is byte-identical to the old\n``return _attribution_envelope(...)`` path (no contract/field/value change),\nand clients that do not advertise ``Accept-Encoding: gzip`` (or tiny\npayloads) get the unchanged JSON body.","operationId":"choghadiya_endpoint_panchang_choghadiya_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Date"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/planets/positions":{"get":{"summary":"Planets Positions","description":"Sidereal + tropical longitudes for all 9 grahas at a specific moment.\n\nThe 9-graha block is a real client payload (the live Panchang page fetches\n`/planets/positions` to render the planets card), so the response is\ngzip-negotiated via the audited `_json_response_maybe_gzip` helper: the\nDECOMPRESSED body is byte-identical to the old `return _attribution_envelope(...)`\npath (no contract/field/value change), and clients that do not advertise\n`Accept-Encoding: gzip` (or tiny payloads) get the unchanged JSON body.","operationId":"planets_positions_planets_positions_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Date"}},{"name":"time","in":"query","required":false,"schema":{"type":"string","description":"HH:MM local time","default":"12:00","title":"Time"},"description":"HH:MM local time"},{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"}},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","default":"lahiri","title":"Ayanamsa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/planets/events":{"get":{"summary":"Planets Events","description":"Formula-backed planetary aspects, ingresses, crossings and stations.","operationId":"planets_events_planets_events_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Date"}},{"name":"time","in":"query","required":false,"schema":{"type":"string","description":"HH:MM or HH:MM:SS local time","default":"00:00","title":"Time"},"description":"HH:MM or HH:MM:SS local time"},{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":31,"minimum":1,"default":10,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","default":"lahiri","title":"Ayanamsa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/vedic-time":{"get":{"summary":"Vedic Time Endpoint","description":"Return the location-specific 60-ghati Vedic clock for one instant.","operationId":"vedic_time_endpoint_panchang_vedic_time_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Date"}},{"name":"time","in":"query","required":true,"schema":{"type":"string","description":"HH:MM or HH:MM:SS local time","title":"Time"},"description":"HH:MM or HH:MM:SS local time"},{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/chart/calculate":{"post":{"summary":"Chart Calculate","description":"Compute Janma Kundali — Lagna, Rashi, Nakshatra, planets, doshas.\n\nThe full Janma Kundali (Lagna/Rashi/Nakshatra + 9-graha block + houses +\ndoshas + divisional charts) is a real, multi-KB client payload, so the\nresponse is gzip-negotiated via the audited ``_json_response_maybe_gzip``\nhelper: the DECOMPRESSED body is byte-identical to the old\n``return _attribution_envelope(result)`` path (no contract/field/value\nchange), and clients that do not advertise ``Accept-Encoding: gzip`` (or\ntiny payloads) get the unchanged JSON body.","operationId":"chart_calculate_chart_calculate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jyotish/bundle":{"post":{"summary":"Jyotish Bundle Endpoint","description":"Personal Jyotish calculation bundle — D1 Janma Kundali + D9/D10 vargas\n+ the Vimshottari dasha tree + 12-house analysis + yoga/dosha report. The\nlive transit overlay and the seven domain packets are layered on at query\ntime. When a session_id / Firebase token is given the bundle is cached in\nbda_personalization.user_jyotish_profiles and reused.","operationId":"jyotish_bundle_endpoint_jyotish_bundle_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BundleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/matching/gunmilan":{"post":{"summary":"Matching Gunmilan Endpoint","description":"Ashtakoota Gun Milan — the classical 36-point two-chart marriage\ncompatibility (8 kootas + cross-chart Manglik balance). Deterministic:\nSwiss-Ephemeris charts in, structured score out; the LLM only narrates.","operationId":"matching_gunmilan_endpoint_matching_gunmilan_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/matching/gunmilan/report":{"post":{"summary":"Matching Gunmilan Report Endpoint","description":"Gun Milan compatibility as a structured, bilingual, source-cited REPORT.\n\nComputes the SAME deterministic Ashtakoota result as the public\n`/matching/gunmilan` endpoint (no new entitlement surface — identical data,\nalready ungated), then renders it as a multi-channel report asset (§7): band\ninterpretation, per-koota breakdown, Manglik balance, §12 guidance-not-fatalism\ndosha notes (no fabricated scripture), and a self-describing constraints\nenvelope. The LLM only narrates; this layer is pure templating.","operationId":"matching_gunmilan_report_endpoint_matching_gunmilan_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/muhurta/search":{"get":{"summary":"Muhurta Search","operationId":"muhurta_search_muhurta_search_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"First local date to scan (YYYY-MM-DD)","title":"Start Date"},"description":"First local date to scan (YYYY-MM-DD)"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":31,"minimum":1,"default":7,"title":"Days"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone; auto-resolved if omitted","title":"Tz"},"description":"IANA timezone; auto-resolved if omitted"},{"name":"activity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Echoed only; activity rules are pandit-pending","title":"Activity"},"description":"Echoed only; activity rules are pandit-pending"},{"name":"top_n","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Top N"}},{"name":"profile","in":"query","required":false,"schema":{"type":"string","default":"north_india_purnimanta","title":"Profile"}},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","default":"lahiri","title":"Ayanamsa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/muhurta/explain":{"get":{"summary":"Muhurta Explain","operationId":"muhurta_explain_muhurta_explain_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"First local date to scan (YYYY-MM-DD)","title":"Start Date"},"description":"First local date to scan (YYYY-MM-DD)"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":31,"minimum":1,"default":7,"title":"Days"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone; auto-resolved if omitted","title":"Tz"},"description":"IANA timezone; auto-resolved if omitted"},{"name":"activity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Echoed only; activity rules are pandit-pending","title":"Activity"},"description":"Echoed only; activity rules are pandit-pending"},{"name":"top_n","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Top N"}},{"name":"profile","in":"query","required":false,"schema":{"type":"string","default":"north_india_purnimanta","title":"Profile"}},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","default":"lahiri","title":"Ayanamsa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/muhurta/activity-certification":{"get":{"summary":"Muhurta Activity Certification","description":"Read-only activity-Muhurta certification registry.\n\nMetadata only: this endpoint does not compute or assert new activity-specific\nMuhurta. Pending activities remain pending until their formula, provenance,\ngolden-case, and reference-parity gates pass.","operationId":"muhurta_activity_certification_muhurta_activity_certification_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/muhurat/electional":{"post":{"summary":"Muhurat Electional Endpoint","description":"Electional Muhurat — rank auspicious time windows across a date range from\nthe universal classical Panchang signals (Choghadiya class + Abhijit, minus\nthe Rahu/Yamaganda/Gulika malefic windows). Deterministic: per-day Swiss-\nEphemeris Panchang in, ranked windows out; the LLM only narrates.\n\nActivity-specific muhurat selection is pandit-gated and NOT asserted here — an\n`activity` is echoed back flagged `pending_pandit_ratification` (§8.3).","operationId":"muhurat_electional_endpoint_muhurat_electional_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElectionalMuhuratRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/muhurat/electional/report":{"post":{"summary":"Muhurat Electional Report Endpoint","description":"Electional Muhurat as a structured, bilingual, source-cited REPORT.\n\nComputes the SAME deterministic electional result as the public\n`/muhurat/electional` endpoint (no new entitlement surface — identical data,\nalready ungated), then renders it as a multi-channel report asset (§7):\nbest-window summary, ranked top windows, per-day avoid windows, the engine's\nactivity-pending disclosure surfaced verbatim (§8.3, no fabricated activity\nruling), and a §12 guidance-not-fatalism note. The LLM only narrates; this\nlayer is pure templating.","operationId":"muhurat_electional_report_endpoint_muhurat_electional_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElectionalMuhuratRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dosha":{"post":{"summary":"Dosha Endpoint","description":"Single-chart Dosha report — deterministic Manglik / Kaal Sarpa / combust-\nretrograde affliction detection for one birth chart, rendered as a structured,\nbilingual, source-cited report asset (§7). Pure: it builds the personal Jyotish\nbundle (Swiss Ephemeris in, structured doshas out) and re-presents the dosha\nsignals it ALREADY computes — no new Jyotish rule is invented. Transit-dependent\nchecks (Sade Sati) are honestly disclosed as NOT part of this natal report\n(§8.3, no fabricated status); §12 guidance-not-fatalism notes are attached, with\nno fabricated scripture. The LLM only narrates; this layer is pure templating.","operationId":"dosha_endpoint_dosha_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DoshaRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dasha-timeline":{"post":{"summary":"Dasha Timeline Endpoint","description":"Vimshottari Dasha-timeline report — the full ~120-year life-period sequence\n(all nine mahadashas with dates) plus the as-of-generation running period,\nrendered as a structured, bilingual, source-cited report asset (§7). Pure: it\nbuilds the personal Jyotish bundle and re-presents the deterministic dasha\ntimeline it ALREADY computes — the dasha sequence is planetary-period arithmetic\nseeded by the Moon's nakshatra, so no astrological judgement is added and nothing\nis fabricated. §12 guidance-not-fatalism (a dasha is a period, not a fate-verdict);\nno scripture quoted. The LLM only narrates; this layer is pure templating.","operationId":"dasha_timeline_endpoint_dasha_timeline_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashaTimelineRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/yogas":{"post":{"summary":"Yogas Endpoint","description":"Yoga & Raja-Yoga report — the BENEFIC/auspicious side of the chart (Pancha\nMahapurusha, Gajakesari, Raja yogas, Dhana yogas) plus the Kaal Sarpa named type\nand combust/retrograde afflictions, rendered as a structured, bilingual,\nsource-cited report asset (§7). Pure: it builds the personal Jyotish bundle and\nre-presents the deterministic structural yoga detection it ALREADY computes — each\nyoga carries the engine's own `basis` (planet · house · dignity / lord-association),\nso no yoga signification or outcome is fabricated. This is the auspicious-yoga\ncompanion to the affliction-only Dosha report. §12 guidance-not-fatalism (a yoga is\na potential, not a guarantee); no scripture quoted. The LLM only narrates; this\nlayer is pure templating.","operationId":"yogas_endpoint_yogas_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/YogaReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/divisional":{"post":{"summary":"Divisional Endpoint","description":"Divisional-chart (Varga) report — the Parashari Shodasavarga subset the engine\ncomputes (D2 wealth, D7 children, D9 marriage/dharma, D10 career, D12 parents, D24\neducation, D60 overall karma) plus Vargottama detection, rendered as a structured,\nbilingual, source-cited report asset (§7). Pure: it builds the personal Jyotish\nbundle and re-presents the deterministic varga placements (each planet's divisional\nsign + house, the divisional lagna, and the engine's own classical theme label) it\nALREADY computes — no varga signification, strength, or outcome is fabricated.\nVargottama is reported as a structural condition (same sign in D1 and D9), its\nweight deferred to a pandit. §12 guidance-not-fatalism; no scripture quoted. The\nLLM only narrates; this layer is pure templating.","operationId":"divisional_endpoint_divisional_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DivisionalReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ashtakavarga":{"post":{"summary":"Ashtakavarga Endpoint","description":"Unreduced Ashtakavarga report asset.\n\nPure deterministic endpoint: builds the same Kundali bundle as the dashboard,\nthen exposes seven Bhinnashtakavarga tables plus unreduced Sarvashtakavarga.\nIt deliberately does not compute Trikona/Ekadhipatya reductions, Pinda\nSadhana, or phala until those rules are separately ratified and tested.","operationId":"ashtakavarga_endpoint_ashtakavarga_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AshtakavargaReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/shadbala":{"post":{"summary":"Shadbala Endpoint","description":"Partial Shadbala subcomponent asset.\n\nExposes only auditable subcomponents currently backed by the Kundali bundle.\nIt does not return a full Shadbala score until all classical components are\nimplemented with golden tests.","operationId":"shadbala_endpoint_shadbala_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShadbalaReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/houses":{"post":{"summary":"Houses Endpoint","description":"Bhava (house) report — the full 12-house analysis the engine computes in the\nwhole-sign system, rendered as a structured, bilingual, source-cited report asset\n(§7). Pure: it builds the personal Jyotish bundle and re-presents the deterministic\nhouse structure it ALREADY computes — each house's sign, ruling lord and where that\nlord sits (with its dignity), the planets occupying the house, the planets aspecting\nit (graha drishti), and the engine's own classical signification — no house outcome,\nstrength, or prediction is fabricated. §12 guidance-not-fatalism; no scripture\nquoted. The LLM only narrates; this layer is pure templating.","operationId":"houses_endpoint_houses_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HousesReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/bhav-chalit":{"post":{"summary":"Bhav Chalit Endpoint","description":"Bhav Chalit (cusp-overlay) report — the Placidus chalit-chakra overlay the engine\ncomputes on top of the whole-sign chart, rendered as a structured, bilingual,\nsource-cited report asset (§7). Pure: it builds the personal Jyotish bundle and\nre-presents the deterministic overlay it ALREADY computes — each planet's whole-sign\n(rashi) house, its Placidus-cusp (chalit) house, the 12 sidereal cusps, and which\nplanets shift bhava between the two — no house outcome, strength, or prediction is\nfabricated. A shift is a structural condition (a planet near a cusp boundary), its\nweight deferred to a pandit. §12 guidance-not-fatalism; no scripture quoted. The LLM\nonly narrates; this layer is pure templating.","operationId":"bhav_chalit_endpoint_bhav_chalit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BhavChalitReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/kp":{"post":{"summary":"Kp Endpoint","description":"KP (Krishnamurti Paddhati) star/sub-lord report — the sub-lord lookup the engine\ncomputes for every planet and house-cusp, rendered as a structured, bilingual,\nsource-cited report asset (§7). Pure: it builds the personal Jyotish bundle and\nre-presents the deterministic KP lookup it ALREADY computes — each planet's and\ncusp's star lord / sub lord / sub-sub lord from the Vimshottari sub-division of its\nnakshatra. KP's predictive step (significator chains, Ruling Planets, the 1–249\nPrashna question-number reading) is NOT in the kp_v1 engine, so this report surfaces\nthe LOOKUP ONLY and asserts no KP prediction. §12 guidance-not-fatalism; no scripture\nquoted. The LLM only narrates; this layer is pure templating.","operationId":"kp_endpoint_kp_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KpReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/alerts/dasha":{"post":{"summary":"Dasha Alerts Endpoint","description":"Subscription dasha-change alerts — the COMPUTE half of subscription\ndelivery/alerts. Builds the member's personal Jyotish bundle and returns every\nVimshottari Mahadasha / Antardasha / Pratyantardasha boundary that falls inside\nthe look-ahead `window_days`, i.e. the dates the running period's ruling planet\nchanges. Pure planetary-period arithmetic over the deterministic timeline the\nbundle already carries — no astrological judgement, no fabrication.\n\nScheduled DELIVERY (recurring push / email on a cadence) is a separate\ninfrastructure layer that needs a worker + prod-config and is NOT performed here;\nthis endpoint computes the alert content on demand and discloses that in the\nreport's `delivery_note`. §12 guidance-not-fatalism; no scripture quoted.","operationId":"dasha_alerts_endpoint_alerts_dasha_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashaAlertsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/alerts/gochar":{"post":{"summary":"Gochar Alerts Endpoint","description":"Subscription transit-change (gochar) alerts — the COMPUTE half of subscription\ndelivery/alerts, the transit companion to /alerts/dasha. Builds the member's\npersonal Jyotish bundle and forward-scans the current sky for every upcoming\nslow-graha (Saturn / Jupiter / Rahu / Ketu) sign-change inside the look-ahead\n`window_days`; a Saturn change also carries the Sade-Sati state transition\n(onset / exit / phase change) it triggers from the natal Moon. Pure ephemeris\narithmetic — no astrological judgement, no fabrication; a sign-change is a\ncalendar date, not a verdict.\n\nScheduled DELIVERY (recurring push / email on a cadence) is a separate\ninfrastructure layer that needs a worker + prod-config and is NOT performed here;\nthis endpoint computes the alert content on demand and discloses that in the\nreport's `delivery_note`. §12 guidance-not-fatalism; no scripture quoted.","operationId":"gochar_alerts_endpoint_alerts_gochar_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GocharAlertsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/alerts/festival":{"post":{"summary":"Festival Alerts Endpoint","description":"Subscription festival/vrat alerts — the COMPUTE half of subscription\ndelivery/alerts, the festival-trigger companion to /alerts/dasha and\n/alerts/gochar. Computes, for the requested LOCATION, every Sanatan Dharma\nfestival or vrat that falls inside the look-ahead `window_days` (each with its\ndays_until and any ritual muhurat windows). Pure tithi / nakshatra / sankranti\narithmetic over the deterministic festival engine (matched to Drik Panchang) —\nno astrological judgement, no fabrication; a festival is a calendar date, not a\nprediction.\n\nUnlike the dasha/gochar alerts this feed is NOT personalised to a birth chart —\na festival falls the same for everyone at a location — so it takes only a\nlocation + window, no birth details.\n\nScheduled DELIVERY (recurring push / email on a cadence) is a separate\ninfrastructure layer that needs a worker + prod-config and is NOT performed here;\nthis endpoint computes the alert content on demand and discloses that in the\nreport's `delivery_note`. No scripture quoted.","operationId":"festival_alerts_endpoint_alerts_festival_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FestivalAlertsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/alerts/digest":{"post":{"summary":"Subscription Digest Endpoint","description":"Unified subscription DIGEST — the COMPUTE half of subscription\ndelivery/alerts. Composes the member's three alert feeds — dasha changes\n(/alerts/dasha), slow-graha transit changes (/alerts/gochar) and festivals/vrats\n(/alerts/festival) — into ONE chronological \"what's coming up for you\" feed over a\nshared look-ahead window. Pure composition over the three already-computed feeds:\nevery entry is a verbatim sub-feed event with a factual bilingual headline; no new\nastrological computation, no fabrication. This is the content layer a member's\nsubscription would deliver — the scheduled DELIVERY itself (a worker + prod-config)\nis a separate infrastructure layer that is NOT performed here and is disclosed in\nthe digest's `delivery_note`. §12 guidance-not-fatalism; no scripture quoted.","operationId":"subscription_digest_endpoint_alerts_digest_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionDigestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/transit":{"post":{"summary":"Transit Endpoint","description":"Transit (Gochar) & Sade-Sati report — the live, query-time transit overlay\nrendered as a structured, bilingual, source-cited report asset (§7). Builds the\nmember's stable birth-derived Jyotish bundle, computes the FRESH transit overlay\nover it (current gochar of the slow grahas with their house from the natal Moon\nand Lagna, the live Sade Sati phase, Jupiter's transit favourability, and the\nVimshottari period running today), and re-presents it as an addressable asset.\n\nThis closes the gap the natal Dosha report disclosed: Sade Sati is transit-\ndependent and was honestly NOT asserted there — this endpoint IS that current-\ntransit computation. Transit positions are pure ephemeris arithmetic over the\ncurrent sky; no astrological judgement is added and nothing is fabricated. §12\nguidance-not-fatalism (a transit is a period, not a fate-verdict; Sade Sati is a\ntime of discipline, not a sentence of misfortune); no scripture quoted. The LLM\nonly narrates; this layer is pure templating.","operationId":"transit_endpoint_transit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransitReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/reports/generate":{"post":{"summary":"Reports Generate Endpoint","description":"Generate the content of a free, deterministic report from the personal\nJyotish bundle. The catalog (`/api_v1_reports_list`) lists the offering and\nits unlock state; THIS endpoint produces the report behind a \"view\" CTA.\n\nOnly the free, fully-deterministic single-profile reports are generated here\n(birth_report, personalised_remedies); paid / interpretive / two-chart reports\nreturn 422 (no path to a paid report for free, no fabricated content). Every\nvalue in the report is sourced from a bundle key and cited (§8.3).","operationId":"reports_generate_endpoint_reports_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/reports/comprehensive":{"post":{"summary":"Reports Comprehensive Endpoint","description":"Complete birth-chart analysis — ONE report that composes every deterministic\nnatal lens (doshas, yogas, the dasha timeline, the houses, the bhav-chalit cusp\noverlay, the divisional charts, and the KP star/sub lords) into a single\nstructured, source-cited asset (§7). It builds the member's stable birth-derived\nJyotish bundle once and assembles the already-LIVE per-lens report renderers over\nit — each section is carried VERBATIM, so no new Jyotish rule is invented and no\nnew entitlement surface is added (every lens is its own ungated endpoint). A lens\nthat honest-degrades for this chart is recorded as absent, not invented. NATAL-\nonly by design (the transit/Sade-Sati lens needs a fresh current-sky overlay and\nstays its own live /transit endpoint). §12 guidance-not-fatalism; no fabricated\nscripture; money-free. The LLM only narrates; this layer is pure composition.","operationId":"reports_comprehensive_endpoint_reports_comprehensive_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComprehensiveReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/reports/timing":{"post":{"summary":"Reports Timing Endpoint","description":"Dated timing forecast — the \"good vs careful dated windows\" view (BM-2).\nBuilds the member's stable birth-derived Jyotish bundle, computes the fresh\ntransit overlay (for the as-of anchor + the current Sade Sati overlay note),\nruns the deterministic dasha-based timing picker\n(timing_windows.compute_timing_windows, timing_v1) for the requested life-area,\nand re-presents its favourable + caution windows as a structured, bilingual,\nsource-cited report asset (§7).\n\nEvery window — its dates, the active Mahādaśā/Antardaśā lords, score,\nconfidence and reasons — is carried VERBATIM from the picker; the favourable /\ncaution classification is the engine's own deterministic scoring, not a\nfabricated verdict. §12 guidance-not-fatalism (a favourable window is an\nopportunity to act, a caution window asks for care — neither is a fixed\noutcome; the health domain adds a medical-decision caveat); no scripture\nquoted; money-free. The LLM only narrates; this layer is pure templating.","operationId":"reports_timing_endpoint_reports_timing_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimingForecastRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/reports/education":{"post":{"summary":"Reports Education Endpoint","description":"Education & learning report — the deterministic education-domain reading.\nBuilds the member's birth-derived Jyotish bundle, runs the deterministic\neducation judgement engine (education_judgement.compute_education_judgement,\neducation_v1.0) over the chart WITH the D24 divisional, the running\nVimshottari MD+AD, and a fresh transit overlay so the FULL R3 weight is\nrealized (1.0), and re-presents its house / karaka / varga / daśā / transit\nscoring + verdict tier as a structured, bilingual, source-cited report (§7).\n\nEvery score, dignity, house-strength block and reasoning factor is carried\nVERBATIM from the engine; the composite score and the verdict tier are the\nengine's own deterministic classification, not a fabricated verdict. The\nengine's own coverage disclosure (partial_coverage + coverage_note) is\nsurfaced verbatim (§8.3). §12 guidance-not-fatalism:\nthe reading maps how the chart supports study — it is not a verdict on a\nperson's intelligence, worth, or future; no scripture is quoted; money-free.\nThe LLM only narrates; this layer is pure templating.","operationId":"reports_education_endpoint_reports_education_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EducationReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/reports/domain":{"post":{"summary":"Reports Domain Endpoint","description":"Focused life-area reading — the deterministic domain-packet view.\nBuilds the member's birth-derived Jyotish bundle, computes the fresh transit\noverlay, assembles the deterministic domain packet\n(domain_packets.build_domain_packet, domain_packets_v1) for the requested life\narea — the relevant houses & their lords, the karaka planets, the relevant\ndivisional chart, the natal yogas/doshas, the running daśā's relevance, the\nlive transits touching the area, the live remedies and the daśā-based timing\nwindows — and re-presents those FACTS as a structured, bilingual, source-cited\nreport asset (§7).\n\nThe engine's own contract is \"STRUCTURED FACTS ONLY — it never contains a\nprediction\"; every fact is carried VERBATIM and this layer adds no verdict,\nscore or astrological judgement. §12 guidance-not-fatalism (a placement marks\na tendency and a support, never a fixed outcome); for the health domain the\nengine's own safety disclaimer is carried verbatim and a medical-decision\ncaveat is added; no scripture quoted; money-free. The LLM only narrates; this\nlayer is pure templating.","operationId":"reports_domain_endpoint_reports_domain_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/varga/domain-pack":{"post":{"summary":"Varga Domain Pack","description":"Atomic deterministic domain packet for reusable Ask/dashboard/API cards.","operationId":"varga_domain_pack_varga_domain_pack_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/career/d10":{"post":{"summary":"Career D10","description":"Career-focused D10 projection from the existing bundle/domain engines.","operationId":"career_d10_career_d10_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/risk-windows":{"post":{"summary":"Health Risk Windows","description":"Spiritual health caution windows; never medical diagnosis.","operationId":"health_risk_windows_health_risk_windows_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthRiskWindowsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/compatibility/advanced":{"post":{"summary":"Compatibility Advanced","description":"Advanced compatibility wrapper over current Gun Milan + Manglik evidence.","operationId":"compatibility_advanced_compatibility_advanced_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dasha/chara":{"post":{"summary":"Dasha Chara","operationId":"dasha_chara_dasha_chara_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dasha/kalachakra":{"post":{"summary":"Dasha Kalachakra","operationId":"dasha_kalachakra_dasha_kalachakra_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/annual/varshaphala":{"post":{"summary":"Annual Varshaphala","operationId":"annual_varshaphala_annual_varshaphala_post","parameters":[{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":2100,"minimum":1900},{"type":"null"}],"title":"Year"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChartRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/annual/muntha":{"post":{"summary":"Annual Muntha","operationId":"annual_muntha_annual_muntha_post","parameters":[{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":2100,"minimum":1900},{"type":"null"}],"title":"Year"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChartRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/annual/mudda-dasha":{"post":{"summary":"Annual Mudda Dasha","operationId":"annual_mudda_dasha_annual_mudda_dasha_post","parameters":[{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":2100,"minimum":1900},{"type":"null"}],"title":"Year"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChartRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/annual/tajika-yogas":{"post":{"summary":"Annual Tajika Yogas","operationId":"annual_tajika_yogas_annual_tajika_yogas_post","parameters":[{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":2100,"minimum":1900},{"type":"null"}],"title":"Year"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChartRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sarvatobhadra":{"post":{"summary":"Sarvatobhadra","operationId":"sarvatobhadra_sarvatobhadra_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/upagraha":{"post":{"summary":"Upagraha","operationId":"upagraha_upagraha_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/special-lagnas":{"post":{"summary":"Special Lagnas","operationId":"special_lagnas_special_lagnas_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/argala":{"post":{"summary":"Argala","operationId":"argala_argala_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jyotish/interpretation_packet":{"post":{"summary":"Api V1 Jyotish Interpretation Packet","description":"BDA Jyotish Knowledge Graph packet for dashboard, Ask and future pages.","operationId":"api_v1_jyotish_interpretation_packet_api_v1_jyotish_interpretation_packet_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InterpretationPacketRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":"Api V1 Jyotish Interpretation Packet Options","operationId":"api_v1_jyotish_interpretation_packet_options_api_v1_jyotish_interpretation_packet_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/jyotish/prashna":{"post":{"summary":"Jyotish Prashna Endpoint","description":"KP horary judgement. Returns the deterministic Prashna packet —\nKP Lagna from the seed number, planets at question time, KP sub-lords\nper planet + per cusp, Ruling Planets, significator chain for the\nquestion house, verdict + Prashna-Moon dasha timing.\n\nThe LLM may only EXPLAIN the packet. It must never invent the KP Lagna,\nRP set, significators, verdict or timing periods.","operationId":"jyotish_prashna_endpoint_jyotish_prashna_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrashnaRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jyotish/prashna/batch":{"post":{"summary":"Jyotish Prashna Batch Endpoint","description":"Multi-option Prashna comparison (Block 5E).\n\nTakes a master_seed + N labeled options (each with its own seed and\noptional region / direction / per-option location). Returns the\ndeterministic ranked recommendation:\n\n  - master_verdict  (\"is the matter itself promised?\" gate)\n  - per-option briefs with composite_score, verdict, timing tiers\n  - a stable comparison_matrix the report renderer can table\n  - top_choice + ranked_labels (deterministic — same input, same order)\n\nThe LLM may only EXPLAIN this packet. It must NOT invent a\ncomposite_score, a rank, a top_choice or a timing_summary_label.","operationId":"jyotish_prashna_batch_endpoint_jyotish_prashna_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrashnaBatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jyotish/prashna/report":{"post":{"summary":"Jyotish Prashna Report Endpoint","description":"Deterministic Prashna report renderer (Block 6).\n\nTakes a Prashna packet (or computes one) plus optional memory context\nand emits a structured report with full audit trail. Every value in\nthe output is sourced from a documented packet key — no LLM is invoked\nin this layer. State/region batches are flagged is_accepted_difference\nwith a mandatory caveat citing the Block 5F-C investigation report.\n\nThe LLM may consume this report as input to a Maa Adya Kali voice\nprose layer (Block 6B), but must NOT invent any value the report\nsurfaces. See app/prashna_report.py module docstring for the 9 hard\nrules this renderer honors.","operationId":"jyotish_prashna_report_endpoint_jyotish_prashna_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrashnaReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jyotish/donation/decide":{"post":{"summary":"Jyotish Donation Decide Endpoint","description":"Deterministic donation prompt rule engine (Block 7).\n\nInputs:\n  - state:   per-user DonationPromptState (client-persisted)\n  - signals: surface + value_event + dwell + intent + question_text\n  - consent: SEPARATE marketing/whatsapp/data-processing consent\n             layers (NEVER bundled per Block 7 directive).\n\nReturns the decision (should_show_prompt, prompt_type, copy_key,\nrendered_copy) plus state_updates the client merges back into its\nlocalStorage envelope.\n\nNO server-side DB write happens in this pass. Storage migration\nis a separate block (will be presented + approved before any DDL).\n\nThe LLM is NEVER called by this endpoint. Pure rules + lookup.","operationId":"jyotish_donation_decide_endpoint_jyotish_donation_decide_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonationDecideRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jyotish/ask/healthz":{"get":{"tags":["universal_agent"],"summary":"Healthz","operationId":"healthz_jyotish_ask_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"options":{"tags":["universal_agent"],"summary":" Opt Healthz","operationId":"_opt_healthz_jyotish_ask_healthz_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/jyotish/ask/start":{"post":{"tags":["universal_agent"],"summary":"Start","operationId":"start_jyotish_ask_start_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskStartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"tags":["universal_agent"],"summary":" Opt Start","operationId":"_opt_start_jyotish_ask_start_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/jyotish/ask/status/{request_id}":{"get":{"tags":["universal_agent"],"summary":"Status","operationId":"status_jyotish_ask_status__request_id__get","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}},{"name":"since_seq","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Since Seq"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"tags":["universal_agent"],"summary":" Opt Status","operationId":"_opt_status_jyotish_ask_status__request_id__options","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jyotish/ask/stream/{request_id}":{"get":{"tags":["universal_agent"],"summary":"Stream","operationId":"stream_jyotish_ask_stream__request_id__get","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"tags":["universal_agent"],"summary":" Opt Stream","operationId":"_opt_stream_jyotish_ask_stream__request_id__options","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jyotish/memory":{"post":{"summary":"Jyotish Memory Endpoint","description":"User memory packet — recent questions, dominant domains, similar past\nquestions, open themes, prior remedies. Powers the \"Continue Your\nGuidance\" surface and is also injected into Ask Maa Kali at answer time\nfor personal questions from logged-in / consented profiles.\n\nAuth: session_id or Firebase ID token resolves the profile. The endpoint\nbypasses the consent gate because the user is explicitly asking to see\ntheir own history; the panchang_ask injection path does NOT bypass it.","operationId":"jyotish_memory_endpoint_jyotish_memory_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/geoip":{"get":{"summary":"Geoip","description":"IP-derived geolocation (no consent needed — it's request metadata).\n\nReturns lat/lng/tz/city/country derived from the client IP.\nUse as the FALLBACK location source. Priority order per architecture:\n  1. Manual location (user input)  — highest\n  2. Browser GPS  (with permission)\n  3. IP geolocation  — this endpoint (fallback)","operationId":"geoip_geoip_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/panchang/festivals":{"get":{"summary":"Panchang Festivals","description":"List Sanatan Dharma festivals computed for any city/range.\n\nEach festival is returned with:\n  - Gregorian date (local timezone)\n  - Bilingual name (en + hi)\n  - Deity, description, lane classification\n  - Muhurat windows (Pradosh, Nishita, Abhijit, Bhadra-avoid)\n  - Rule explanation (which tithi/nakshatra/sankranti instant drives the date)\n\nMath: tithi = (Moon longitude - Sun longitude) / 12° · sidereal Lahiri ayanamsa.\nSee app/festivals.py for the full algorithm.\n\nTransport: the response is gzip-compressed when the client advertises\n`Accept-Encoding: gzip` and the body clears the size threshold; the\ndecompressed body is byte-identical to the plain JSON, and identity clients\nare unchanged. The payload is computed by `_panchang_festivals_dict`, which\n`/panchang/month` also calls internally (consuming the dict directly, so it\nis unaffected by the route's transport encoding).","operationId":"panchang_festivals_panchang_festivals_get","parameters":[{"name":"lat","in":"query","required":false,"schema":{"type":"number","default":-33.8688,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","default":151.2093,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"type":"string","default":"Australia/Sydney","title":"Tz"}},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Date"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":365,"title":"Days"}},{"name":"anchor_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Anchor Date"}},{"name":"only","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Only"}},{"name":"include_aliases","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Aliases"}},{"name":"include_popular","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Popular"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/vrats":{"get":{"summary":"Panchang Vrats","description":"Recurring vrat scan for a city/range.\n\nUses the ratified panchanga scan rulesets, not the broad festival registry:\nEkadashi, Purnima, Amavasya, Pradosha, Sankashti, and Masik Shivaratri.\n\nTransport: the response is gzip-compressed when the client advertises\n`Accept-Encoding: gzip` and the body clears the size threshold; the\ndecompressed body is byte-identical to the plain JSON, and identity clients\nare unchanged. The payload is computed by `_panchang_vrats_dict`, which\n`/panchang/month` also calls internally (consuming the dict directly, so it\nis unaffected by the route's transport encoding).","operationId":"panchang_vrats_panchang_vrats_get","parameters":[{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":-33.8688,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":151.2093,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"Australia/Sydney","title":"Tz"}},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Date"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":60,"title":"Days"}},{"name":"max_per_rule","in":"query","required":false,"schema":{"type":"integer","maximum":6,"minimum":1,"default":2,"title":"Max Per Rule"}},{"name":"include_top","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Top"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/calendar/convert":{"get":{"summary":"Calendar Convert","operationId":"calendar_convert_calendar_convert_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Gregorian local date to convert (YYYY-MM-DD)","title":"Date"},"description":"Gregorian local date to convert (YYYY-MM-DD)"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone; auto-resolved if omitted","title":"Tz"},"description":"IANA timezone; auto-resolved if omitted"},{"name":"elevation_m","in":"query","required":false,"schema":{"type":"number","default":0.0,"title":"Elevation M"}},{"name":"profile","in":"query","required":false,"schema":{"type":"string","default":"north_india_purnimanta","title":"Profile"}},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","default":"lahiri","title":"Ayanamsa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/festival/observance/explain":{"get":{"summary":"Festival Observance Explain","operationId":"festival_observance_explain_festival_observance_explain_get","parameters":[{"name":"slug","in":"query","required":true,"schema":{"type":"string","description":"Festival rule key or supported regional alias","title":"Slug"},"description":"Festival rule key or supported regional alias"},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":2100,"minimum":1900},{"type":"null"}],"title":"Year"}},{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":-33.8688,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":151.2093,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"type":"string","default":"Australia/Sydney","title":"Tz"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/festival/observance/compare":{"get":{"summary":"Festival Observance Compare","operationId":"festival_observance_compare_festival_observance_compare_get","parameters":[{"name":"slug","in":"query","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":2100,"minimum":1900},{"type":"null"}],"title":"Year"}},{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":-33.8688,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":151.2093,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"type":"string","default":"Australia/Sydney","title":"Tz"}},{"name":"compare_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":90.0,"minimum":-90.0},{"type":"null"}],"title":"Compare Lat"}},{"name":"compare_lng","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Compare Lng"}},{"name":"compare_tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compare Tz"}},{"name":"tradition","in":"query","required":false,"schema":{"type":"string","default":"north_india_purnimanta","title":"Tradition"}},{"name":"compare_tradition","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compare Tradition"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/festival/provenance/{slug}":{"get":{"summary":"Festival Provenance","operationId":"festival_provenance_festival_provenance__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/festival/debate/{slug}":{"get":{"summary":"Festival Debate","operationId":"festival_debate_festival_debate__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":2100,"minimum":1900},{"type":"null"}],"title":"Year"}},{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":-33.8688,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":151.2093,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"type":"string","default":"Australia/Sydney","title":"Tz"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/festival/why-not/{slug}":{"get":{"summary":"Festival Why Not","operationId":"festival_why_not_festival_why_not__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"target_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Optional civil date to compare against the computed observance","title":"Target Date"},"description":"Optional civil date to compare against the computed observance"},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":2100,"minimum":1900},{"type":"null"}],"title":"Year"}},{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":-33.8688,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":151.2093,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"type":"string","default":"Australia/Sydney","title":"Tz"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/festival/locality-shift/{slug}":{"get":{"summary":"Festival Locality Shift","operationId":"festival_locality_shift_festival_locality_shift__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":2100,"minimum":1900},{"type":"null"}],"title":"Year"}},{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":-33.8688,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":151.2093,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"type":"string","default":"Australia/Sydney","title":"Tz"}},{"name":"compare_lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":28.6139,"title":"Compare Lat"}},{"name":"compare_lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":77.209,"title":"Compare Lng"}},{"name":"compare_tz","in":"query","required":false,"schema":{"type":"string","default":"Asia/Kolkata","title":"Compare Tz"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/new-year/regional":{"get":{"summary":"Regional New Years","operationId":"regional_new_years_new_year_regional_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":2100,"minimum":1900},{"type":"null"}],"title":"Year"}},{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":-33.8688,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":151.2093,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"type":"string","default":"Australia/Sydney","title":"Tz"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/temple-observance/{festival}":{"get":{"summary":"Temple Observance","operationId":"temple_observance_temple_observance__festival__get","parameters":[{"name":"festival","in":"path","required":true,"schema":{"type":"string","title":"Festival"}},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":2100,"minimum":1900},{"type":"null"}],"title":"Year"}},{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":-33.8688,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":151.2093,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"type":"string","default":"Australia/Sydney","title":"Tz"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/vrat/parana":{"get":{"summary":"Vrat Parana","operationId":"vrat_parana_vrat_parana_get","parameters":[{"name":"vrat","in":"query","required":false,"schema":{"type":"string","default":"ekadashi","title":"Vrat"}},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Date"}},{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":-33.8688,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":151.2093,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"Australia/Sydney","title":"Tz"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eclipse/visibility":{"get":{"summary":"Eclipse Visibility","operationId":"eclipse_visibility_eclipse_visibility_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date for eclipse scan","title":"Date"},"description":"Start date for eclipse scan"},{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":0.0,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":0.0,"title":"Lng"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eclipse/sutak":{"get":{"summary":"Eclipse Sutak","operationId":"eclipse_sutak_eclipse_sutak_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date for eclipse scan","title":"Date"},"description":"Start date for eclipse scan"},{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":0.0,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":0.0,"title":"Lng"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/feeds/festivals.json":{"get":{"summary":"Festivals Json Feed","operationId":"festivals_json_feed_feeds_festivals_json_get","parameters":[{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":-33.8688,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":151.2093,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"Australia/Sydney","title":"Tz"}},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Date"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":3660,"minimum":1,"default":365,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/feeds/vrats.json":{"get":{"summary":"Vrats Json Feed","operationId":"vrats_json_feed_feeds_vrats_json_get","parameters":[{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":-33.8688,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":151.2093,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"Australia/Sydney","title":"Tz"}},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Date"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":366,"minimum":1,"default":90,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/feeds/gochar.json":{"get":{"summary":"Gochar Json Feed","operationId":"gochar_json_feed_feeds_gochar_json_get","parameters":[{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"UTC start date for the gochar scan (YYYY-MM-DD)","title":"From Date"},"description":"UTC start date for the gochar scan (YYYY-MM-DD)"},{"name":"window_days","in":"query","required":false,"schema":{"type":"integer","maximum":1100,"minimum":1,"default":370,"title":"Window Days"}},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","default":"lahiri","title":"Ayanamsa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/calendar/festivals.ics":{"get":{"summary":"Festivals Ics","operationId":"festivals_ics_calendar_festivals_ics_get","parameters":[{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":-33.8688,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":151.2093,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"Australia/Sydney","title":"Tz"}},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Date"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":3660,"minimum":1,"default":365,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/festival/ics":{"get":{"summary":"Festival Ics Alias","operationId":"festival_ics_alias_festival_ics_get","parameters":[{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":-33.8688,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":151.2093,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"Australia/Sydney","title":"Tz"}},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Date"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":3660,"minimum":1,"default":365,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/calendar/vrats.ics":{"get":{"summary":"Vrats Ics","operationId":"vrats_ics_calendar_vrats_ics_get","parameters":[{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":-33.8688,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":151.2093,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"Australia/Sydney","title":"Tz"}},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Date"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":366,"minimum":1,"default":90,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/calendar/muhurta.ifb":{"get":{"summary":"Muhurta Freebusy","operationId":"muhurta_freebusy_calendar_muhurta_ifb_get","parameters":[{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":-33.8688,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":151.2093,"title":"Lng"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Local date (YYYY-MM-DD)","title":"Date"},"description":"Local date (YYYY-MM-DD)"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"Australia/Sydney","title":"Tz"}},{"name":"elevation_m","in":"query","required":false,"schema":{"type":"number","default":0.0,"title":"Elevation M"}},{"name":"profile","in":"query","required":false,"schema":{"type":"string","default":"north_india_purnimanta","title":"Profile"}},{"name":"ayanamsa","in":"query","required":false,"schema":{"type":"string","default":"lahiri","title":"Ayanamsa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/openapi/domain/{family}":{"get":{"summary":"Openapi Domain Family","operationId":"openapi_domain_family_openapi_domain__family__get","parameters":[{"name":"family","in":"path","required":true,"schema":{"type":"string","title":"Family"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/schema/festival/{slug}":{"get":{"summary":"Festival Schema Jsonld","operationId":"festival_schema_jsonld_schema_festival__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year"}},{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"default":-33.8688,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"default":151.2093,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"Australia/Sydney","title":"Tz"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/schema/temple/{temple_id}":{"get":{"summary":"Temple Schema Jsonld","operationId":"temple_schema_jsonld_schema_temple__temple_id__get","parameters":[{"name":"temple_id","in":"path","required":true,"schema":{"type":"string","title":"Temple Id"}},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Display name; defaults to the slug title","title":"Name"},"description":"Display name; defaults to the slug title"},{"name":"url","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Canonical public URL; defaults to bda.ai/teerth/{id}","title":"Url"},"description":"Canonical public URL; defaults to bda.ai/teerth/{id}"},{"name":"locality","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locality"}},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"IN","title":"Country"}},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":90.0,"minimum":-90.0},{"type":"null"}],"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Lng"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/diwali":{"get":{"summary":"Panchang Diwali","description":"Gold-standard Diwali Lakshmi Puja muhurat for any location + year.\n\nThis is the FIRST gold-standard rule per the architecture brief.\nReturns local civil date + exact Pradosh × Amavasya intersection\nwindow + methodology fingerprint (diwali_lakshmi_puja_v1).\n\nThe 200 muhurat payload (window + methodology fingerprint + meta) is the\nheaviest single-festival read-only SEO/AEO surface, so it is gzip-negotiated\nvia the audited `_json_response_maybe_gzip` helper: the DECOMPRESSED body is\nbyte-identical to the old `return _with_meta(result)` path (no\ncontract/field/value change), and the 404 (un-resolvable year) path is\nunchanged. No PII; no reflected request input.\n\nExample:\n    GET /panchang/diwali?year=2025&lat=-33.8688&lng=151.2093&tz=Australia/Sydney","operationId":"panchang_diwali_panchang_diwali_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year"}},{"name":"lat","in":"query","required":false,"schema":{"type":"number","default":28.6139,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","default":77.209,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"type":"string","default":"Asia/Kolkata","title":"Tz"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api_v1_panchang_ask":{"post":{"summary":"Api V1 Panchang Ask","description":"Retired legacy Ask path. Use /jyotish/ask/start + stream/status.","operationId":"api_v1_panchang_ask_api_v1_panchang_ask_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"options":{"summary":"Api V1 Panchang Ask Options","description":"CORS preflight.","operationId":"api_v1_panchang_ask_options_api_v1_panchang_ask_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_ask_question_policy":{"post":{"summary":"Api V1 Ask Question Policy","description":"Classify an Ask Maa Kali question before the UI sends it to the LLM.","operationId":"api_v1_ask_question_policy_api_v1_ask_question_policy_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskPolicyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":"Api V1 Ask Question Policy Options","description":"CORS preflight.","operationId":"api_v1_ask_question_policy_options_api_v1_ask_question_policy_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_profile_get":{"post":{"summary":"Api V1 Profile Get","description":"Fetch profile by Firebase UID or anonymous session_id.","operationId":"api_v1_profile_get_api_v1_profile_get_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileGetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt Pg","operationId":"_opt_pg_api_v1_profile_get_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_profile_upsert":{"post":{"summary":"Api V1 Profile Upsert","description":"Create or update profile (intake fills this incrementally).","operationId":"api_v1_profile_upsert_api_v1_profile_upsert_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileUpsertRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt Pu","operationId":"_opt_pu_api_v1_profile_upsert_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_chat_history":{"post":{"summary":"Api V1 Chat History","description":"Paginated chat history for the calling profile.","operationId":"api_v1_chat_history_api_v1_chat_history_post","parameters":[{"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileGetRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt Ch","operationId":"_opt_ch_api_v1_chat_history_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_profile_delete":{"post":{"summary":"Api V1 Profile Delete","description":"GDPR right-to-be-forgotten — hard-deletes the profile and all related rows.","operationId":"api_v1_profile_delete_api_v1_profile_delete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileDeleteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt Pd","operationId":"_opt_pd_api_v1_profile_delete_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/context/resolve":{"get":{"summary":"Context Resolve","description":"Resolve canonical public context for any page/widget/chat call.\n\nTransport: the canonical context carries a full location object plus the\npanchang summary, so the dashboard fetches it on every location change (and\nit triggers the bundle load). The response is gzip-negotiated via the\naudited ``_json_response_maybe_gzip`` helper — the DECOMPRESSED body is\nbyte-identical to the old ``return _with_meta(...)`` path (no contract,\nfield, or value change), and clients that do not advertise\n``Accept-Encoding: gzip`` (or tiny payloads) get the unchanged JSON body.\n``request`` is FastAPI-injected, not a query param, so the public query\ncontract (lat/lng/lon/tz/place/date/time) is unchanged. Same proven\ntransport-only pattern as #460/#461/#462/#463/#469/#470/#480.","operationId":"context_resolve_context_resolve_get","parameters":[{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":90.0,"minimum":-90.0},{"type":"null"}],"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Lng"}},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Lon"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional IANA hint; coordinates remain canonical","title":"Tz"},"description":"Optional IANA hint; coordinates remain canonical"},{"name":"place","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Place"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date"}},{"name":"time","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api_v1_context_resolve":{"post":{"summary":"Api V1 Context Resolve","operationId":"api_v1_context_resolve_api_v1_context_resolve_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContextResolveRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt Context Resolve","operationId":"_opt_context_resolve_api_v1_context_resolve_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_user_context":{"post":{"summary":"Api V1 User Context","description":"One reusable identity + profile + current/birth context envelope.","operationId":"api_v1_user_context_api_v1_user_context_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserContextRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt User Context","operationId":"_opt_user_context_api_v1_user_context_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_place_search":{"post":{"summary":"Api V1 Place Search","description":"Geocode a user-typed place string; return ranked candidates.","operationId":"api_v1_place_search_api_v1_place_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt Ps","operationId":"_opt_ps_api_v1_place_search_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/location/search":{"get":{"summary":"Location Search","description":"Public place search using the same candidate-confirmation contract.\n\nThis is the canonical system entry point for turning user text into\ncandidate locations. Callers must still use/confirm one returned candidate;\nnever silently pick an ambiguous city.\n\nTransport: a place-search response carries up to 10 candidates × ~16 fields\neach (~2.5–3 KB), and the dashboard birth-place autocomplete fires it\nper-keystroke during onboarding, so the response is gzip-negotiated via the\naudited ``_json_response_maybe_gzip`` helper. The DECOMPRESSED body is\nbyte-identical to the old ``return _with_meta(...)`` path (no contract,\nfield, or value change), and clients that do not advertise\n``Accept-Encoding: gzip`` (or tiny payloads) get the unchanged JSON body.\nSame proven transport-only pattern as #460/#461/#462/#463/#469/#470.","operationId":"location_search_location_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Place name or address","title":"Q"},"description":"Place name or address"},{"name":"country_hint","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional ISO country hint, e.g. in, au, gb","title":"Country Hint"},"description":"Optional ISO country hint, e.g. in, au, gb"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/location/resolve":{"get":{"summary":"Location Resolve","description":"Normalize coordinates into the canonical location object.\n\nCoordinates are truth. The timezone is resolved from lat/lng and any\nconflicting hint is rejected by _resolve_timezone.","operationId":"location_resolve_location_resolve_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional IANA timezone hint; validated against coordinates","title":"Tz"},"description":"Optional IANA timezone hint; validated against coordinates"},{"name":"label","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api_v1_place_confirm":{"post":{"summary":"Api V1 Place Confirm","description":"User picked one candidate → store as confirmed location + sync into profile.","operationId":"api_v1_place_confirm_api_v1_place_confirm_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceConfirmRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt Pc","operationId":"_opt_pc_api_v1_place_confirm_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_panchang_sample_questions":{"get":{"summary":"Api V1 Panchang Sample Questions","description":"Return the Drik-parity sample question taxonomy (11 groups, 65+ chips).","operationId":"api_v1_panchang_sample_questions_api_v1_panchang_sample_questions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_panchang_lane_audit":{"get":{"summary":"Api V1 Panchang Lane Audit","description":"Backend lane gap audit — which Drik topics Ask AI already answers vs gaps.","operationId":"api_v1_panchang_lane_audit_api_v1_panchang_lane_audit_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_dashboard_today":{"post":{"summary":"Api V1 Dashboard Today","description":"Composite today's-context endpoint for the dashboard.\n\nReturns the daily Panchang (tithi, nakshatra, yoga, karana, paksha,\nsunrise/sunset) AND the auspicious/inauspicious Choghadiya windows\n(rahu kaala, yamaganda, gulika) for the member's current location.\n\nPowered by the existing /panchang/daily compute; this endpoint adds\nprofile-aware location resolution, bilingual labels, and a stable\nshape the `panchang_today` + `avoid_today` widgets consume.","operationId":"api_v1_dashboard_today_api_v1_dashboard_today_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardTodayRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt Dt","operationId":"_opt_dt_api_v1_dashboard_today_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_reports_list":{"post":{"summary":"Api V1 Reports List","description":"Return the per-member report catalog with per-report unlock state.\n\nThe catalog itself is product-defined (see _REPORTS_CATALOG). Per\nuser, each entry is decorated with:\n  unlocked      — True if user has paid for it OR it's free-for-members\n                   AND they have a profile saved.\n  cta_action    — \"view\" (unlocked) | \"donate_to_unlock\" | \"buy\" | \"save_profile\"\n\nThe widget renders this directly; ZERO product copy lives client-side.","operationId":"api_v1_reports_list_api_v1_reports_list_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportsListRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt Rl","operationId":"_opt_rl_api_v1_reports_list_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_donation_config":{"get":{"summary":"Api V1 Donation Config Get","operationId":"api_v1_donation_config_get_api_v1_donation_config_get","parameters":[{"name":"surface","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"modal_after_value","title":"Surface"}},{"name":"context","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"any","title":"Context"}},{"name":"donor","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Donor"}},{"name":"item_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Item Id"}},{"name":"item_label","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Item Label"}},{"name":"profile_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"}},{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Api V1 Donation Config Post","operationId":"api_v1_donation_config_post_api_v1_donation_config_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonationConfigRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt Dc","operationId":"_opt_dc_api_v1_donation_config_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_donation_ops_status":{"get":{"summary":"Api V1 Donation Ops Status Get","operationId":"api_v1_donation_ops_status_get_api_v1_donation_ops_status_get","parameters":[{"name":"smoke_rpc","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Smoke Rpc"}},{"name":"profile_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Api V1 Donation Ops Status Post","operationId":"api_v1_donation_ops_status_post_api_v1_donation_ops_status_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonationOpsStatusRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt Dos","operationId":"_opt_dos_api_v1_donation_ops_status_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_profile_dq_status":{"get":{"summary":"Api V1 Profile Dq Status Get","operationId":"api_v1_profile_dq_status_get_api_v1_profile_dq_status_get","parameters":[{"name":"smoke_rpc","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Smoke Rpc"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Api V1 Profile Dq Status Post","operationId":"api_v1_profile_dq_status_post_api_v1_profile_dq_status_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileDQStatusRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api_v1_donation_payment_record":{"post":{"summary":"Api V1 Donation Payment Record","description":"Record a confirmed provider payment and unlock exactly one item.\n\nThis endpoint is for trusted webhook/Velo infrastructure, not browser\nclients. General temple donations are recorded in the payment ledger but\nnever unlock dashboard items. Item entitlements require a profile identity.","operationId":"api_v1_donation_payment_record_api_v1_donation_payment_record_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonationPaymentRecordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt Dpr","operationId":"_opt_dpr_api_v1_donation_payment_record_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_donation_webhook":{"post":{"summary":"Api V1 Donation Webhook","description":"Alias for provider webhook integrations.","operationId":"api_v1_donation_webhook_api_v1_donation_webhook_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt Dwh","operationId":"_opt_dwh_api_v1_donation_webhook_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_donation_audit":{"post":{"summary":"Api V1 Donation Audit","description":"Admin/audit view: who donated, for what item, and fulfillment state.","operationId":"api_v1_donation_audit_api_v1_donation_audit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonationAuditRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt Da","operationId":"_opt_da_api_v1_donation_audit_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_entitlement_fulfillment":{"post":{"summary":"Api V1 Entitlement Fulfillment","operationId":"api_v1_entitlement_fulfillment_api_v1_entitlement_fulfillment_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntitlementFulfillmentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt Ef","operationId":"_opt_ef_api_v1_entitlement_fulfillment_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_donation_state":{"post":{"summary":"Api V1 Donation State","description":"Return the canonical donation state for the dashboard's\n`donation_seva` widget.\n\nInputs:\n  state   — the client's localStorage envelope (DonationPromptState).\n\nOutputs:\n  total_given_aud, currency, last_at, donor (bool), prompt_eligible,\n  and bilingual CTA label.\n\nNo DB write — donation persistence migration is tracked as a\nseparate block. The widget passes its state up, server returns a\nnormalised + decorated view.","operationId":"api_v1_donation_state_api_v1_donation_state_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonationStateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt Ds","operationId":"_opt_ds_api_v1_donation_state_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_temple_campaign":{"post":{"summary":"Api V1 Temple Campaign","description":"Return the Maa Kali Temple campaign view for the dashboard's\n`temple_seva` widget. Mixes product-defined campaign config with the\nmember's own contribution (from client donation_state envelope).","operationId":"api_v1_temple_campaign_api_v1_temple_campaign_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TempleCampaignRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt Tc","operationId":"_opt_tc_api_v1_temple_campaign_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api_v1_dashboard_bundle":{"post":{"summary":"Api V1 Dashboard Bundle","description":"Composite endpoint — every personalised data point in one call.\n\nAuth: verified firebase_id_token OR fresh Wix member_id. Without either, returns\n`{error: \"auth_required\"}` and HTTP 200 (the dashboard handles the\nneeds_auth state by gating its own UI, not by 401-ing).","operationId":"api_v1_dashboard_bundle_api_v1_dashboard_bundle_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardBundleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"summary":" Opt Db","operationId":"_opt_db_api_v1_dashboard_bundle_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/question/diagnose":{"post":{"summary":"Question Diagnose","operationId":"question_diagnose_question_diagnose_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionDiagnoseRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/question/evidence":{"post":{"summary":"Question Evidence","operationId":"question_evidence_question_evidence_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionEvidenceRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/question/answer-pack":{"post":{"summary":"Question Answer Pack","operationId":"question_answer_pack_question_answer_pack_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionEvidenceRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/answer/provenance/{answer_id}":{"get":{"summary":"Answer Provenance","operationId":"answer_provenance_answer_provenance__answer_id__get","parameters":[{"name":"answer_id","in":"path","required":true,"schema":{"type":"string","title":"Answer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/life-events/upsert":{"post":{"summary":"Life Events Upsert","operationId":"life_events_upsert_life_events_upsert_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LifeEventUpsertRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/life-events/timeline":{"get":{"summary":"Life Events Timeline","operationId":"life_events_timeline_life_events_timeline_get","parameters":[{"name":"firebase_id_token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"}},{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},{"name":"member_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/validation/event-map":{"post":{"summary":"Validation Event Map","operationId":"validation_event_map_validation_event_map_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationEventMapRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/validation/ratification/{chart_id}":{"get":{"summary":"Validation Ratification","operationId":"validation_ratification_validation_ratification__chart_id__get","parameters":[{"name":"chart_id","in":"path","required":true,"schema":{"type":"string","title":"Chart Id"}},{"name":"firebase_id_token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"}},{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},{"name":"member_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/validation/scorecard/{chart_id}":{"get":{"summary":"Validation Scorecard","operationId":"validation_scorecard_validation_scorecard__chart_id__get","parameters":[{"name":"chart_id","in":"path","required":true,"schema":{"type":"string","title":"Chart Id"}},{"name":"firebase_id_token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"}},{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},{"name":"member_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/prediction/register":{"post":{"summary":"Prediction Register","operationId":"prediction_register_prediction_register_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PredictionRegisterRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/prediction/audit/{chart_id}":{"get":{"summary":"Prediction Audit","operationId":"prediction_audit_prediction_audit__chart_id__get","parameters":[{"name":"chart_id","in":"path","required":true,"schema":{"type":"string","title":"Chart Id"}},{"name":"firebase_id_token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"}},{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},{"name":"member_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jaimini/profile":{"post":{"summary":"Jaimini Profile","operationId":"jaimini_profile_jaimini_profile_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardBundleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dasha/yogini":{"post":{"summary":"Dasha Yogini","operationId":"dasha_yogini_dasha_yogini_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardBundleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dasha/yogini/report":{"post":{"summary":"Dasha Yogini Report","operationId":"dasha_yogini_report_dasha_yogini_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardBundleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dasha/ashtottari":{"post":{"summary":"Dasha Ashtottari","operationId":"dasha_ashtottari_dasha_ashtottari_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardBundleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dasha/narayana":{"post":{"summary":"Dasha Narayana","operationId":"dasha_narayana_dasha_narayana_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardBundleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dasha/chara/report":{"post":{"summary":"Dasha Chara Report","operationId":"dasha_chara_report_dasha_chara_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardBundleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arudha/all":{"post":{"summary":"Arudha All","operationId":"arudha_all_arudha_all_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardBundleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/spiritual-profile":{"post":{"summary":"Dashboard Spiritual Profile","operationId":"dashboard_spiritual_profile_dashboard_spiritual_profile_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardBundleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/life-areas":{"post":{"summary":"Dashboard Life Areas","operationId":"dashboard_life_areas_dashboard_life_areas_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardBundleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/top-opportunities":{"post":{"summary":"Dashboard Top Opportunities","operationId":"dashboard_top_opportunities_dashboard_top_opportunities_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardBundleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/wealth-timeline":{"post":{"summary":"Dashboard Wealth Timeline","operationId":"dashboard_wealth_timeline_dashboard_wealth_timeline_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardBundleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/travel-support":{"post":{"summary":"Dashboard Travel Support","operationId":"dashboard_travel_support_dashboard_travel_support_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardBundleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/power-signals":{"post":{"summary":"Dashboard Power Signals","operationId":"dashboard_power_signals_dashboard_power_signals_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardBundleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/panchang/festival/{rule_key}":{"get":{"summary":"Panchang Festival Single","description":"Compute a single festival in a given year for a given city.\nUseful for 'When is Diwali 2026 in Sydney?' style questions.\n\nThe 200 occurrence payload is read-only and deterministic and is fetched by\nanswer-engine/SEO crawlers for 'when is <festival> <year>' queries, so it is\ngzip-negotiated via the audited `_json_response_maybe_gzip` helper: the\nDECOMPRESSED body is byte-identical to the old `return _with_meta({...})`\npath (no contract/field/value change), and both 404 paths (unknown rule key,\nun-resolvable occurrence) are unchanged. No PII; no reflected request input.","operationId":"panchang_festival_single_panchang_festival__rule_key__get","parameters":[{"name":"rule_key","in":"path","required":true,"schema":{"type":"string","title":"Rule Key"}},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year"}},{"name":"lat","in":"query","required":false,"schema":{"type":"number","default":-33.8688,"title":"Lat"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number","default":151.2093,"title":"Lng"}},{"name":"tz","in":"query","required":false,"schema":{"type":"string","default":"Australia/Sydney","title":"Tz"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AshtakavargaReportRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"AshtakavargaReportRequest"},"AskPolicyRequest":{"properties":{"question":{"type":"string","maxLength":2000,"minLength":1,"title":"Question"},"surface":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Surface","default":"panchang"},"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"},"logged_in":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Logged In","default":false},"has_birth_details":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Birth Details","default":false}},"type":"object","required":["question"],"title":"AskPolicyRequest"},"AskStartRequest":{"properties":{"question":{"type":"string","maxLength":2000,"minLength":1,"title":"Question"},"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"},"has_birth_details":{"type":"boolean","title":"Has Birth Details","default":false},"has_prashna_seed":{"type":"boolean","title":"Has Prashna Seed","default":false},"has_memory_consent":{"type":"boolean","title":"Has Memory Consent","default":false},"profile":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Profile"},"canonical_context":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Canonical Context"},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Id"},"pair_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pair Key"}},"type":"object","required":["question"],"title":"AskStartRequest"},"BhavChalitReportRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"BhavChalitReportRequest"},"BundleRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"firebase_id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"transits":{"type":"boolean","title":"Transits","default":true},"domains":{"type":"boolean","title":"Domains","default":true}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"BundleRequest"},"ChartRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"elevation_m":{"type":"number","title":"Elevation M","default":0.0},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"type":"string","title":"Ayanamsa","default":"lahiri"}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"ChartRequest"},"ComprehensiveReportRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"ComprehensiveReportRequest"},"ConsentFlags":{"properties":{"data_processing_consent":{"type":"boolean","title":"Data Processing Consent","default":false},"service_email_consent":{"type":"boolean","title":"Service Email Consent","default":false},"marketing_consent":{"type":"boolean","title":"Marketing Consent","default":false},"whatsapp_consent":{"type":"boolean","title":"Whatsapp Consent","default":false}},"type":"object","title":"ConsentFlags","description":"Codex rule: marketing/fundraising consent and WhatsApp consent\nare SEPARATE from birth-data processing consent. They are NEVER\nbundled. The rule engine reads them; the UI presents them as\nSEPARATE checkboxes (never one combined checkbox)."},"ContextResolveRequest":{"properties":{"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"},"lng":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lng"},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"place":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Place"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time"},"date_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Source"},"time_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Source"},"source":{"type":"string","title":"Source","default":"explicit"}},"type":"object","title":"ContextResolveRequest"},"DashaAlertsRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"},"window_days":{"type":"integer","maximum":366.0,"minimum":1.0,"title":"Window Days","description":"Look-ahead window in days to scan for upcoming dasha changes","default":90}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"DashaAlertsRequest"},"DashaTimelineRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"DashaTimelineRequest"},"DashboardBundleRequest":{"properties":{"firebase_id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"},"lng":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lng"},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"place":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Place"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time"},"date_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Source"},"time_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Source"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"type":"object","title":"DashboardBundleRequest"},"DashboardTodayRequest":{"properties":{"firebase_id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"},"lng":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"}},"type":"object","title":"DashboardTodayRequest"},"DivisionalReportRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"DivisionalReportRequest"},"DomainReportRequest":{"properties":{"domain":{"type":"string","title":"Domain","description":"career|marriage|education|finance|health|travel|spiritual"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"}},"type":"object","required":["domain","date_of_birth","time_of_birth","lat","lng"],"title":"DomainReportRequest"},"DonationAuditRequest":{"properties":{"profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"},"limit":{"type":"integer","title":"Limit","default":100},"offset":{"type":"integer","title":"Offset","default":0}},"type":"object","title":"DonationAuditRequest"},"DonationConfigRequest":{"properties":{"surface":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Surface","default":"modal_after_value"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context","default":"any"},"donor":{"type":"boolean","title":"Donor","default":false},"item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Item Id"},"item_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Item Label"},"profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},"type":"object","title":"DonationConfigRequest"},"DonationDecideRequest":{"properties":{"state":{"$ref":"#/components/schemas/DonationPromptState"},"signals":{"$ref":"#/components/schemas/DonationSignals"},"consent":{"$ref":"#/components/schemas/ConsentFlags"}},"type":"object","required":["state","signals","consent"],"title":"DonationDecideRequest","description":"Inputs for the donation prompt rule engine. Client owns the state\nenvelope (persisted in localStorage in pass 1 — no server DB writes).\n\nThe endpoint runs deterministic rules and returns a decision plus a\n`state_updates` patch the client should merge back into its state.\n\nAudit trail (in `decision.audit_trail`) lists every rule that fired,\nso Codex can trace why a prompt did / did not show."},"DonationOpsStatusRequest":{"properties":{"profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"},"smoke_rpc":{"type":"boolean","title":"Smoke Rpc","default":false}},"type":"object","title":"DonationOpsStatusRequest"},"DonationPaymentRecordRequest":{"properties":{"firebase_id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"},"firebase_uid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Uid"},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"},"provider":{"type":"string","title":"Provider","default":"stripe"},"provider_payment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Payment Id"},"provider_session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Session Id"},"provider_order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Order Id"},"payment_status":{"type":"string","title":"Payment Status","default":"pending"},"amount":{"type":"number","title":"Amount","default":0},"amount_aud":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount Aud"},"currency":{"type":"string","title":"Currency","default":"AUD"},"frequency":{"type":"string","title":"Frequency","default":"one_time"},"campaign_id":{"type":"string","title":"Campaign Id","default":"maa_adya_kali_temple"},"item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Item Id"},"item_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Item Label"},"metadata":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Metadata"},"raw_event":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Raw Event"}},"type":"object","title":"DonationPaymentRecordRequest"},"DonationPromptState":{"properties":{"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"},"impression_count":{"type":"integer","title":"Impression Count","default":0},"dismiss_count":{"type":"integer","title":"Dismiss Count","default":0},"donate_click_count":{"type":"integer","title":"Donate Click Count","default":0},"last_prompt_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Prompt At"},"last_prompt_surface":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Prompt Surface"},"last_prompt_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Prompt Reason"},"last_prompt_copy_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Prompt Copy Key"},"questions_since_last_prompt":{"type":"integer","title":"Questions Since Last Prompt","default":0},"questions_since_donation":{"type":"integer","title":"Questions Since Donation","default":0},"donation_cooldown_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Donation Cooldown Until"},"last_donation_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Donation At"},"donated_total":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Donated Total"},"donated_recently":{"type":"boolean","title":"Donated Recently","default":false},"marketing_consent":{"type":"boolean","title":"Marketing Consent","default":false},"whatsapp_consent":{"type":"boolean","title":"Whatsapp Consent","default":false},"sensitive_suppression_count":{"type":"integer","title":"Sensitive Suppression Count","default":0},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"lifetime_dwell_seconds":{"type":"integer","title":"Lifetime Dwell Seconds","default":0}},"type":"object","title":"DonationPromptState","description":"Per-user/session counters + cooldowns. All fields are optional\non the wire so a fresh visitor can post `{}` and the rule engine\ntreats them as zeros/Nones."},"DonationSignals":{"properties":{"surface":{"type":"string","enum":["soft_inline","modal_after_value","report_support_prompt","recurring_support_prompt","donor_thank_you","passive_dwell","email_footer","whatsapp"],"title":"Surface"},"value_event":{"type":"boolean","title":"Value Event","default":false},"dwell_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dwell Seconds"},"questions_total":{"type":"integer","title":"Questions Total","default":0},"intent_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intent Domain"},"question_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question Text"},"report_generated":{"type":"boolean","title":"Report Generated","default":false},"report_downloaded":{"type":"boolean","title":"Report Downloaded","default":false},"mobile_fullscreen":{"type":"boolean","title":"Mobile Fullscreen","default":false}},"type":"object","required":["surface"],"title":"DonationSignals","description":"The dynamic inputs the rule engine reads for the current turn."},"DonationStateRequest":{"properties":{"firebase_id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"state":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"State"}},"type":"object","title":"DonationStateRequest"},"DoshaRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"DoshaRequest"},"EducationReportRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"EducationReportRequest"},"ElectionalMuhuratRequest":{"properties":{"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"start_date":{"type":"string","format":"date","title":"Start Date","description":"First local date to scan (YYYY-MM-DD)"},"days":{"type":"integer","maximum":31.0,"minimum":1.0,"title":"Days","description":"Number of days to scan from start_date","default":7},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz","description":"IANA timezone (auto-resolved from lat/lng if omitted)"},"activity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Activity","description":"Optional activity (e.g. griha_pravesh, vivah). Echoed only — activity-specific muhurat rulesets are pandit-pending; the ranking is activity-agnostic universal classical signals."},"top_n":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Top N","description":"How many top windows to return","default":10},"profile":{"type":"string","title":"Profile","description":"Regional profile","default":"north_india_purnimanta"},"ayanamsa":{"type":"string","title":"Ayanamsa","description":"Sidereal ayanamsa","default":"lahiri"}},"type":"object","required":["lat","lng","start_date"],"title":"ElectionalMuhuratRequest"},"EntitlementFulfillmentRequest":{"properties":{"entitlement_id":{"type":"string","title":"Entitlement Id"},"fulfillment_status":{"type":"string","title":"Fulfillment Status","default":"fulfilled"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["entitlement_id"],"title":"EntitlementFulfillmentRequest"},"FestivalAlertsRequest":{"properties":{"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"from_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From Date","description":"Look-ahead start date (local). Defaults to today."},"window_days":{"type":"integer","maximum":400.0,"minimum":1.0,"title":"Window Days","description":"Look-ahead window in days to scan for upcoming festivals/vrats","default":90}},"type":"object","required":["lat","lng"],"title":"FestivalAlertsRequest"},"GocharAlertsRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"},"window_days":{"type":"integer","maximum":1100.0,"minimum":1.0,"title":"Window Days","description":"Look-ahead window in days to scan for upcoming slow-graha sign-changes (and the Sade-Sati transitions they trigger)","default":365}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"GocharAlertsRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthRiskWindowsRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"elevation_m":{"type":"number","title":"Elevation M","default":0.0},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"type":"string","title":"Ayanamsa","default":"lahiri"},"horizon_months":{"type":"integer","maximum":60.0,"minimum":1.0,"title":"Horizon Months","default":12}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"HealthRiskWindowsRequest"},"HousesReportRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"HousesReportRequest"},"InterpretationPacketRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat","description":"Birth latitude"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng","description":"Birth longitude"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","description":"Optional life-area: career|marriage|education|finance|health|travel|spiritual"},"current_lat":{"anyOf":[{"type":"number","maximum":90.0,"minimum":-90.0},{"type":"null"}],"title":"Current Lat"},"current_lng":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Current Lng"},"current_lon":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Current Lon"},"current_tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Tz"},"current_place":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Place"},"current_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Date"},"current_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Time"}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"InterpretationPacketRequest"},"KpReportRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"KpReportRequest"},"LifeEventRecord":{"properties":{"subject":{"type":"string","maxLength":80,"minLength":1,"title":"Subject","default":"self"},"category":{"type":"string","maxLength":80,"minLength":1,"title":"Category"},"event_label":{"type":"string","maxLength":200,"minLength":1,"title":"Event Label"},"event_date":{"type":"string","format":"date","title":"Event Date"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"},"source":{"type":"string","maxLength":80,"minLength":1,"title":"Source","default":"owner"},"consented":{"type":"boolean","title":"Consented","default":false}},"type":"object","required":["category","event_label","event_date"],"title":"LifeEventRecord"},"LifeEventUpsertRequest":{"properties":{"firebase_id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"event":{"$ref":"#/components/schemas/LifeEventRecord"}},"type":"object","required":["event"],"title":"LifeEventUpsertRequest"},"MatchPerson":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"type":"string","title":"Ayanamsa","default":"lahiri"}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"MatchPerson"},"MatchRequest":{"properties":{"groom":{"$ref":"#/components/schemas/MatchPerson"},"bride":{"$ref":"#/components/schemas/MatchPerson"}},"type":"object","required":["groom","bride"],"title":"MatchRequest"},"MemoryRequest":{"properties":{"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"firebase_id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"question":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question","default":""},"intent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intent"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"},"max_recent":{"type":"integer","title":"Max Recent","default":10},"max_similar":{"type":"integer","title":"Max Similar","default":5}},"type":"object","title":"MemoryRequest"},"PanchangCommentRequest":{"properties":{"page_key":{"type":"string","maxLength":180,"minLength":1,"title":"Page Key"},"page_url":{"type":"string","maxLength":500,"minLength":1,"title":"Page Url"},"display_name":{"type":"string","maxLength":60,"minLength":1,"title":"Display Name","default":"Devotee"},"comment":{"type":"string","maxLength":1500,"minLength":3,"title":"Comment"},"idempotency_key":{"type":"string","maxLength":100,"minLength":8,"title":"Idempotency Key"},"website":{"type":"string","maxLength":200,"title":"Website","description":"Spam honeypot; must remain empty","default":""}},"type":"object","required":["page_key","page_url","comment","idempotency_key"],"title":"PanchangCommentRequest"},"PlaceConfirmRequest":{"properties":{"firebase_id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"kind":{"type":"string","title":"Kind"},"place":{"type":"object","title":"Place"}},"type":"object","required":["kind","place"],"title":"PlaceConfirmRequest"},"PlaceSearchRequest":{"properties":{"query":{"type":"string","title":"Query"},"country_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Hint"},"limit":{"type":"integer","title":"Limit","default":5}},"type":"object","required":["query"],"title":"PlaceSearchRequest"},"PrashnaBatchOption":{"properties":{"label":{"type":"string","maxLength":120,"minLength":1,"title":"Label","description":"Human-readable label, e.g. 'Wagga Wagga'"},"seed_number":{"type":"integer","maximum":249.0,"minimum":1.0,"title":"Seed Number","description":"KP horary seed 1-249 for this option"},"lat":{"anyOf":[{"type":"number","maximum":90.0,"minimum":-90.0},{"type":"null"}],"title":"Lat","description":"Optional override of the querent location for this option"},"lng":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"region":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Region","description":"Region tag (e.g. 'regional NSW', 'metro Sydney') — metadata only"},"direction":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Direction","description":"Direction tag (e.g. 'north', 'south-east', 'interstate') — metadata only"}},"type":"object","required":["label","seed_number"],"title":"PrashnaBatchOption"},"PrashnaBatchRequest":{"properties":{"master_seed":{"type":"integer","maximum":249.0,"minimum":1.0,"title":"Master Seed","description":"Master question seed (the matter-itself gate)"},"options":{"items":{"$ref":"#/components/schemas/PrashnaBatchOption"},"type":"array","maxItems":10,"minItems":1,"title":"Options"},"question":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question"},"question_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question Domain","description":"property|legal|sale|marriage|career|education|finance|health|travel|children"},"question_schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question Schema","description":"Multi-house schema key — overrides question_domain → schema mapping"},"question_time_utc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question Time Utc","description":"ISO datetime when the question was asked (defaults to now UTC)"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat","description":"Default querent location latitude"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng","description":"Default querent location longitude"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"type":"string","title":"Ayanamsa","default":"lahiri"},"birth_details":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Birth Details","description":"Optional querent natal data — folds NRP into every option's packet"}},"type":"object","required":["master_seed","options","lat","lng"],"title":"PrashnaBatchRequest"},"PrashnaReportRequest":{"properties":{"packet":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Packet","description":"A Prashna packet from compute_prashna or compute_prashna_batch. If omitted, the endpoint computes it from the single_seed_inputs OR batch_inputs field."},"single_seed_inputs":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Single Seed Inputs","description":"Inputs forwarded to compute_prashna (seed_number, lat, lng, question_time_utc, etc.) when packet is not supplied."},"batch_inputs":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Batch Inputs","description":"Inputs forwarded to compute_prashna_batch (master_seed, options[], lat, lng, etc.) when packet is not supplied."},"memory_context":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Memory Context","description":"Optional memory packet from /jyotish/memory; cited verbatim in the memory_context_section of the report."}},"type":"object","title":"PrashnaReportRequest","description":"Either provide a fully-formed Prashna packet (single-seed or batch),\nOR provide the inputs needed for compute_prashna / compute_prashna_batch\nand the endpoint will compute the packet first, then render it.\n\n`memory_context` is optional. When supplied, the report cites recent\nthemes / dominant domain / similar prior questions in the memory\nsection (Block 2A integration)."},"PrashnaRequest":{"properties":{"seed_number":{"type":"integer","maximum":249.0,"minimum":1.0,"title":"Seed Number","description":"KP horary number 1-249"},"question":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question"},"question_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question Domain","description":"property|marriage|career|education|finance|health|travel|legal|sale|..."},"question_house":{"anyOf":[{"type":"integer","maximum":12.0,"minimum":1.0},{"type":"null"}],"title":"Question House","description":"Explicit house 1-12 (overrides question_domain → single-house verdict)"},"question_schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question Schema","description":"Multi-house schema key — property|legal|sale|marriage|career|education|finance|health|travel|children. Overrides question_domain → multi-house schema mapping."},"question_time_utc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question Time Utc","description":"ISO datetime when the question was asked (defaults to now UTC)"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"type":"string","title":"Ayanamsa","default":"lahiri"},"birth_details":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Birth Details","description":"Optional querent natal data: {date_of_birth, time_of_birth, birth_lat, birth_lng, birth_tz, ayanamsa}. When supplied, NRP corroboration is added to the verdict."}},"type":"object","required":["seed_number","lat","lng"],"title":"PrashnaRequest"},"PredictionRegisterRequest":{"properties":{"firebase_id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"prediction_text":{"type":"string","maxLength":4000,"minLength":1,"title":"Prediction Text"},"scope":{"type":"string","maxLength":120,"minLength":1,"title":"Scope","default":"general"},"confidence":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Confidence"},"target_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Target Date"},"target_window_start":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Target Window Start"},"target_window_end":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Target Window End"},"evidence":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Evidence"}},"type":"object","required":["prediction_text"],"title":"PredictionRegisterRequest"},"ProfileDQStatusRequest":{"properties":{"smoke_rpc":{"type":"boolean","title":"Smoke Rpc","default":true}},"type":"object","title":"ProfileDQStatusRequest"},"ProfileDeleteRequest":{"properties":{"firebase_id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"}},"type":"object","title":"ProfileDeleteRequest"},"ProfileGetRequest":{"properties":{"firebase_id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},"type":"object","title":"ProfileGetRequest"},"ProfileUpsertRequest":{"properties":{"firebase_id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"patch":{"type":"object","title":"Patch"}},"type":"object","required":["patch"],"title":"ProfileUpsertRequest"},"QuestionDiagnoseRequest":{"properties":{"question":{"type":"string","maxLength":2000,"minLength":1,"title":"Question"},"surface":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Surface","default":"dashboard"},"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"},"logged_in":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Logged In","default":false},"has_birth_details":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Birth Details","default":false}},"type":"object","required":["question"],"title":"QuestionDiagnoseRequest"},"QuestionEvidenceRequest":{"properties":{"firebase_id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"},"lng":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lng"},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"place":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Place"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time"},"date_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Source"},"time_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Source"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"question":{"type":"string","maxLength":2000,"minLength":1,"title":"Question"},"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"},"surface":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Surface","default":"dashboard"},"max_chars":{"anyOf":[{"type":"integer","maximum":8000.0,"minimum":500.0},{"type":"null"}],"title":"Max Chars","default":2000}},"type":"object","required":["question"],"title":"QuestionEvidenceRequest"},"ReportGenerateRequest":{"properties":{"report_id":{"type":"string","title":"Report Id","description":"Catalog report id to generate. Supported (free, deterministic): birth_report | personalised_remedies."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"firebase_id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"}},"type":"object","required":["report_id","date_of_birth","time_of_birth","lat","lng"],"title":"ReportGenerateRequest"},"ReportsListRequest":{"properties":{"firebase_id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},"type":"object","title":"ReportsListRequest"},"ShadbalaReportRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"ShadbalaReportRequest"},"SubscriptionDigestRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"},"window_days":{"type":"integer","maximum":366.0,"minimum":1.0,"title":"Window Days","description":"Shared look-ahead window in days applied to all three feeds (dasha changes, slow-graha transit changes, festivals/vrats)","default":90}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"SubscriptionDigestRequest"},"TempleCampaignRequest":{"properties":{"firebase_id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"state":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"State"}},"type":"object","title":"TempleCampaignRequest"},"TimingForecastRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"},"domain":{"type":"string","title":"Domain","description":"Life-area to forecast: career | marriage | education | finance | health | travel | spiritual.","default":"career"},"horizon_months":{"type":"integer","maximum":120.0,"minimum":1.0,"title":"Horizon Months","description":"How far ahead to scan the daśā tree (months, 1..120).","default":36}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"TimingForecastRequest"},"TransitReportRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"TransitReportRequest"},"UserContextRequest":{"properties":{"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"},"lng":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lng"},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"place":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Place"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time"},"date_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Source"},"time_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Source"},"source":{"type":"string","title":"Source","default":"explicit"},"firebase_id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"}},"type":"object","title":"UserContextRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"ValidationEventMapRequest":{"properties":{"firebase_id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firebase Id Token"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"event":{"$ref":"#/components/schemas/LifeEventRecord"},"date_of_birth":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date Of Birth"},"time_of_birth":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Of Birth"},"lat":{"anyOf":[{"type":"number","maximum":90.0,"minimum":-90.0},{"type":"null"}],"title":"Lat"},"lng":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"}},"type":"object","required":["event"],"title":"ValidationEventMapRequest"},"YogaReportRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"type":"string","format":"date","title":"Date Of Birth"},"time_of_birth":{"type":"string","title":"Time Of Birth","description":"HH:MM:SS in local time"},"time_accuracy":{"type":"string","title":"Time Accuracy","description":"exact|approximate|unknown","default":"exact"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"},"ayanamsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ayanamsa"}},"type":"object","required":["date_of_birth","time_of_birth","lat","lng"],"title":"YogaReportRequest"}}}}