Skip to content

Calculation engine

Every number this API returns comes from an ephemeris, not a lookup table and not a model. This is what is underneath, and where we draw the line on what we will not compute.

The ephemeris

Positions come from the NASA JPL planetary ephemeris — the same data set used for spacecraft navigation — through the Swiss Ephemeris. That is 105 MB of tabulated positions covering 500–2999 AD, plus 735 fixed stars.

It matters because the alternative is arithmetic that is close enough for a newspaper column and not for a chart. Mean-motion formulae drift by degrees over centuries; a birth in 1890 or 2090 is where that shows up, and a divisional chart is where it becomes a different answer rather than a slightly different one. At D60, half a degree moves a planet into the next division.

Sidereal, and which sidereal

Vedic astrology is sidereal: positions are measured from a fixed starting point in the sky rather than from the moving equinox. The offset between the two is the ayanamsa, currently around 24°, and there is no single agreed value for it.

So it is a parameter. 48 ayanamsas are accepted — Lahiri, Raman, Krishnamurti, Fagan-Bradley, Yukteshwar, Suryasiddhanta and the rest — and Lahiri is the default because it is the Indian government standard, not because it is the correct one.

every chart endpoint takes it
{
  "date_time": "1990-08-15T10:30:00+05:30",
  "latitude": 26.9124,
  "longitude": 75.7873,
  "timezone_as_float": 5.5,
  "ayanamsa": "KRISHNAMURTI"
}

Two practitioners who disagree about the ayanamsa can both use this API and both get the chart they expect. An API that hard-codes one has quietly taken a side in an argument that is not settled.

What it covers

309 endpoints, grouped by what they compute:

AI & chat1
PDF reports2
Panchang19
Muhurta & timings15
Sunrise & moonrise2
Lunar3
Calendars13
Festivals & vrats3
Birth chart & houses11
Divisional charts23
Jaimini5
KP (Krishnamurti Paddhati)2
Chakras1
Planets & positions11
Strength (bala)5
Ashtakavarga5
Dashas — nakshatra (planet)12
Dashas — rashi (Jaimini)20
Dasha tools6
Yogas & doshas4
Lal Kitab5
Matching & compatibility6
Transits & annual charts9
Tajika & varshaphala11
Scans & transitions8
Predictions & readings9
Prashna5
Avatar chakra1
Tarot4
Pancha Pakshi2
Returns5
Eclipses8
Mundane astrology10
Fixed stars4
Traditional & Hellenistic5
Western astrology12
Numerology15
Chinese astrology4
Astrocartography4
Human Design3
Celebrity data2
Natural hazards5
Utilities3
Astrology2
prashnavali4

Speed

Median server time is 65 ms, with 69% of endpoints under 100 ms, measured across every published example against a local run. The ephemeris is memory-mapped, so the cost of a chart is the arithmetic rather than the disk.

Where a call is slower it is because the work is genuinely larger — a transit search scans a date range, and a PDF report assembles around twenty-five endpoints into one document and bills as a single call.

Determinism

The same input returns the same output, always. There is no sampling and no model in the path, so a chart cast today and the same chart cast next year are byte-identical. That is what makes the responses cacheable, and it is what lets 1,106 test functions assert exact values rather than ranges.

It also means a disagreement is checkable. If our Moon and your software’s Moon differ, one of the two is wrong and the ayanamsa or the timezone will say which — rather than both being “about right”.

What we will not compute

The engine can produce a number for almost anything. Some of those numbers would not mean what a reader takes them to mean, and those endpoints do not exist.

  • Lal Kitab ancestral debts. The eight debts are named consistently across sources. The conditions that raise each one are not — published rules for pitra rin alone give different answers for the same chart. We will not publish a verdict about someone’s ancestors that rests on which book we happened to read.
  • Fields we cannot derive a rule for. Where a competitor returns a value we could not establish from a source, the field is absent and the response says why, rather than carrying a plausible guess a caller would have no way to check.
  • Anything presented as medical, legal or financial advice. Remedial text is traditional attribution and is labelled as such.

Where two schools genuinely disagree and both are defensible, the response says which one it applied — so the answer can be checked rather than taken.

Try it

curl
curl -X POST https://api.occultapi.com/api/astro/planet-positions/ \
  -H 'X-API-Key: yt_live_your_key_here' \
  -H 'Content-Type: application/json' \
  -d '{
    "date_time": "1990-08-15T10:30:00+05:30",
    "latitude": 26.9124,
    "longitude": 75.7873,
    "timezone_as_float": 5.5,
    "ayanamsa": "LAHIRI"
  }'

Or run it in the playground without writing any code.

Next