For developers
Build on the classical sky
Compute sidereal charts, daśās, yogas and aspects, and query the AI-audited classical rule graph behind every reading. Authenticate with an X-API-Key header, or with a Bearer session while signed in. Base URL https://atri.living.
Two surfaces. The Chart API computes a sidereal chart; the Corpus API browses the classical-rules graph behind every reading.
Auth. Every call needs an X-API-Key header or a Bearer session.
Corpus envelope. { data, meta } with limit/offset/has_more pagination.
Honest caveat. Corpus rules are OCR + LLM-extracted, currently uncited, and can be noisy — filter with min_confidence.
Try it live
Request tester
Send real requests against your account and inspect the response. Sign in (top right) or paste an API key to authenticate; otherwise requests return 401.
/api/chart// The response will appear here.
API keys
Reference
Every endpoint requires authentication — a valid X-API-Key header or a Authorization: Bearer <session> token. Readings and chat are softened for people; /api/rules returns the raw classical text.
Chart & compute
POST/api/chartAPI key or session
Compute a full sidereal chart — ascendant, planets, houses, aspects, conjunctions, Vimśottari daśās, and yogas. No LLM.
Request
| name | string | required | Subject name (echoed back). |
| dob | string | required | Date of birth, YYYY-MM-DD. |
| tob | string | required | Time of birth, HH:MM (24h). |
| location | string | optional | Place of birth; geocoded server-side if lat/lon are omitted. |
| lat | number | optional | Latitude — skips geocoding when set with lon. |
| lon | number | optional | Longitude — skips geocoding when set with lat. |
Example request
{ "name": "John Doe", "dob": "1991-11-14", "tob": "04:42", "location": "Pune, India" }Response
{
"name": "John Doe",
"metadata": { "date", "time", "location", "coordinates": { "lat", "lon" }, "timezone" },
"ascendant": { "longitude", "sign", "degree" },
"planets": { "Sun": { "longitude", "sign", "degree", "house", "is_retrograde", "aspected_houses": [] }, ... },
"dasha": { "maha_dasha", "antara_dasha", "pratyantara_dasha" },
"transits": { ... },
"conjunctions": [ { "sign", "planets": [] } ],
"yogas": [ { "name", "category", "description" } ]
}POST/api/readingAPI key or session
Compute the chart, retrieve matching classical rules from the graph, and synthesize a grounded reading in Markdown.
Request
| name / dob / tob / location | — | required | Same birth fields as /api/chart. |
| query | string | optional | A focus for the reading (e.g. “career this year”). Defaults to a general reading. |
Example request
{ "name": "John Doe", "dob": "1991-11-14", "tob": "04:42", "location": "Pune, India", "query": "career" }Response
{ "id", "name", "metadata", "reading": "<markdown>", "rules_applied": [ "<rule>", ... ], "chart_data": { ... } }GET/api/geocode?q=API key or session
Resolve a place name to candidate coordinates (server-side Nominatim) for the location field.
Request
| q | query string | required | Place text, 3+ characters. |
Example request
GET /api/geocode?q=Pune
Response
{ "results": [ { "label": "Pune, Maharashtra, India", "lat": 18.5213, "lon": 73.8545 }, ... ] }POST/api/rulesAPI key or session
Query the AI-audited classical rule graph directly for a chart. Returns the raw classical rules (unsoftened).
Request
| chart_data | object | required | A full chart object as returned by /api/chart. |
Example request
{ "chart_data": { ...output of /api/chart... } }Response
{ "rules": [ "[NATAL] Sun in 10th_House: ...", "[ASPECT] Saturn aspecting 10th_House: ...", ... ] }Corpus
GET/api/corpus/rulesAPI key or session
Search the classical-rules graph by entity. Provide at least one filter; combining entities returns rules where they all co-occur (e.g. planet + house).
Request
| planet | query | optional | e.g. Venus, Saturn, Rahu. |
| house | query int | optional | 1–12. |
| sign | query | optional | e.g. Aries. |
| yoga | query | optional | A yoga name. |
| nakshatra | query | optional | e.g. Rohini. |
| rule_type | query | optional | Filter by rule type (see /corpus/entities). |
| min_confidence | query 0–100 | optional | Drop low-confidence / noisy rules. |
| limit / offset | query int | optional | Pagination; limit ≤ 200 (default 50). |
Example request
GET /api/corpus/rules?planet=Venus&house=8&min_confidence=60&limit=10
Response
{
"data": [ { "condition", "effect", "rule_type", "confidence", "source_id" }, ... ],
"meta": { "returned", "limit", "offset", "has_more", "filters", "note" }
}GET/api/corpus/yogasAPI key or session
List the classical yogas present in the corpus, with how many rules each carries.
Request
| search | query | optional | Case-insensitive name substring. |
| limit / offset | query int | optional | Pagination; limit ≤ 500 (default 100). |
Example request
GET /api/corpus/yogas?search=raja&limit=20
Response
{ "data": [ { "name": "Raja Yoga", "rule_count": 67 }, ... ], "meta": { "returned", "has_more", ... } }GET/api/corpus/yogas/{name}API key or session
Return the classical rules recorded for a named yoga. 404 if the name isn’t found.
Request
| name | path | required | The yoga name (URL-encoded). |
Example request
GET /api/corpus/yogas/Raja%20Yoga
Response
{ "data": [ { "condition", "effect", "rule_type", "confidence", "source_id" }, ... ], "meta": { "name", "returned", "note" } }GET/api/corpus/entitiesAPI key or session
Discover what you can query: every entity type with a count and example names.
Example request
GET /api/corpus/entities
Response
{ "data": { "PLANET": { "count", "examples": [] }, "YOGA": { ... }, "NAKSHATRA": { ... }, ... }, "meta": { "types" } }Account routes (/api/user/*) power the Atri web app itself — saved charts, chat threads, and key management — and require a signed-in Bearer session, not an API key. They are not part of the partner API surface.