deep-dive

Shani Sade Sati timing and stages via API

How to compute Shani Sade Sati start, peak and end dates, plus the three stages and Dhaiya, through the Vedika astrology API with code examples.

Shani Sade Sati is the roughly seven-and-a-half-year period when transiting Saturn passes over the three zodiac signs centred on a person's natal Moon: the 12th, the 1st and the 2nd sign counted from the Moon's sign. To compute it through the Vedika API you send a birth record to a Saturn-transit computation endpoint, and the response returns the natal Moon sign plus dated start, peak and end windows for each of the three stages. Because Saturn's ingress dates come from the underlying ephemeris rather than a lookup table, the boundaries are exact to the transit, including retrograde re-entries.

What Sade Sati is, in computational terms

Strip away the folklore and Sade Sati is a piece of transit geometry. Saturn takes about two and a half years to cross one sidereal sign. The period begins when Saturn enters the sign immediately before the natal Moon's sign (the 12th from the Moon), continues through the sign the Moon occupies (the 1st), and ends when Saturn leaves the sign immediately after the Moon's sign (the 2nd). Three signs at roughly thirty months each gives the familiar seven-and-a-half years.

The classical framing of Saturn's transit relative to the Moon appears in the standard Jyotish curriculum, including Brihat Parashara Hora Shastra and Phaladeepika, which treat Saturn's relationship to the Moon as a marker of mental and material strain. The API keeps interpretation separate from arithmetic: the transit windows are pure astronomy, and any written reading is attributed to those sources rather than asserted as fact.

The three stages

Alongside the main cycle, two shorter Saturn passages share the same geometry and are commonly reported together: Dhaiya (also called Small Panoti or Kantaka/Ashtama Shani), Saturn's transit over the 4th and 8th signs from the natal Moon.

The data the calculation needs

Everything hinges on one computed value: the sidereal longitude of the natal Moon, from which its sign is derived. That in turn requires a complete, unambiguous birth record. The single most common integration bug here is a dropped or wrong timezone, because the Moon moves about half a degree every hour — enough to shift a borderline chart into the neighbouring sign and produce Sade Sati dates that are off by two and a half years.

FieldTypeExampleNotes
datetimeISO 86011990-08-15T14:30:00+05:30Local birth time with its UTC offset
latitudenumber19.0760Decimal degrees, north positive
longitudenumber72.8777Decimal degrees, east positive
timezoneIANA stringAsia/KolkataResolves historical DST correctly

Send both the UTC offset in the datetime and the IANA timezone name. The offset disambiguates the instant; the IANA name lets the engine apply the correct historical rules for births that predate or straddle a daylight-saving change.

Computing the stages with a single request

The V2 computation surface takes a flat birth record and returns structured data. The example below requests Saturn's transit context for a natal Moon, which is the basis for the Sade Sati windows. The base URL is https://api.vedika.io and authentication is a header.

curl -X POST https://api.vedika.io/v2/astrology/saturn-transit \
  -H "x-api-key: vk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "datetime": "1990-08-15T14:30:00+05:30",
    "latitude": 19.0760,
    "longitude": 72.8777,
    "timezone": "Asia/Kolkata",
    "system": "vedic",
    "include": ["sade_sati", "dhaiya"]
  }'

A representative response carries the natal Moon sign and the dated windows for each phase. Field names follow your account's API version; treat the shape below as illustrative.

{
  "natalMoon": { "sign": "Capricorn", "longitude": 282.41 },
  "sadeSati": {
    "active": true,
    "currentStage": "peak",
    "stages": [
      { "stage": "rising",  "signFromMoon": 12, "start": "2023-01-17", "end": "2025-03-29" },
      { "stage": "peak",    "signFromMoon": 1,  "start": "2025-03-29", "end": "2027-06-03" },
      { "stage": "setting", "signFromMoon": 2,  "start": "2027-06-03", "end": "2029-08-21" }
    ]
  },
  "dhaiya": { "active": false, "nextStart": "2032-02-05" }
}

The signFromMoon field makes the geometry explicit, so you can render the right stage label without re-deriving the relationship yourself.

Calling it from application code

The same request from a server-side runtime. Use whatever HTTP client your stack favours; no special SDK is required, though the official JavaScript and Python SDKs wrap auth and retries for you.

async function getSadeSati(birth) {
  const res = await fetch("https://api.vedika.io/v2/astrology/saturn-transit", {
    method: "POST",
    headers: {
      "x-api-key": process.env.VEDIKA_API_KEY,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      datetime: birth.datetime,        // "1990-08-15T14:30:00+05:30"
      latitude: birth.latitude,
      longitude: birth.longitude,
      timezone: birth.timezone,        // "Asia/Kolkata"
      system: "vedic",
      include: ["sade_sati", "dhaiya"],
    }),
  });
  if (!res.ok) throw new Error(`Vedika API ${res.status}`);
  const data = await res.json();
  return data.sadeSati;
}
import os, requests

def get_sade_sati(birth: dict) -> dict:
    res = requests.post(
        "https://api.vedika.io/v2/astrology/saturn-transit",
        headers={"x-api-key": os.environ["VEDIKA_API_KEY"]},
        json={
            "datetime": birth["datetime"],
            "latitude": birth["latitude"],
            "longitude": birth["longitude"],
            "timezone": birth["timezone"],
            "system": "vedic",
            "include": ["sade_sati", "dhaiya"],
        },
        timeout=15,
    )
    res.raise_for_status()
    return res.json()["sadeSati"]

Adding a written reading

Dated windows answer when. To answer what it means in a sentence a user can read, send the same birth record to the natural-language endpoint. The reading is generated on top of the computed transit, so the prose and the dates never disagree.

curl -X POST https://api.vedika.io/api/v1/astrology/query \
  -H "x-api-key: vk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "question": "Am I in Sade Sati, and which stage? What should I expect?",
    "birthDetails": {
      "datetime": "1990-08-15T14:30:00+05:30",
      "latitude": 19.0760,
      "longitude": 72.8777,
      "timezone": "Asia/Kolkata"
    },
    "speed": "fast"
  }'

For a chat or voice surface where you want tokens as they arrive, point at /api/v1/astrology/query/stream, which returns the same answer as server-sent events. Drop the speed field for the standard reasoning path; keep "speed": "fast" on the Business plan and above for lower latency.

Interpretive sentences are attributed to the classical Jyotish corpus rather than presented as bare assertions, which matters if you are surfacing readings to paying users who may know the texts. The query path covers the same questions you would otherwise model by hand — current stage, remaining duration, and the practical themes each phase carries.

Three systems, one birth record

Sade Sati is a Vedic (sidereal) concept, but the same birth record drives Western (tropical) and KP computations in this API, so a Saturn-focused feature can sit beside a tropical Saturn-return feature without a second integration. Set system to vedic, western or kp on the computation endpoints. The natal Moon's sidereal longitude that underpins Sade Sati comes from the XALEN Ephemeris, Vedika's own open-source astronomical engine, which is validated against JPL DE440 and swetest with no chart deviating beyond 0.1 degrees across a five-million-chart test. That is astronomical precision for planetary positions; it is the foundation the transit dates rest on, distinct from how any reading is interpreted.

Practical notes for integrators

Key facts

Where to go next

Prototype the request and response shapes in the free sandbox, then check exact field names and version notes in the API docs. When you are ready to size a deployment, the pricing page lays out the per-query and subscription tiers. If your roadmap also includes the running planetary periods that pair naturally with transit timing, see our guide on the Vimshottari dasha API.

Frequently asked questions

What birth data does the Sade Sati endpoint need?
The natal Moon position, derived from a full birth record: datetime with offset, latitude, longitude and an IANA timezone string. From the Moon sign the API projects Saturn over the 12th, 1st and 2nd signs to compute the stages.
Does the API return exact start and end dates for each stage?
Yes. Saturn's ingress into each sign is computed from the ephemeris, so the response carries datetime boundaries for the rising, peak and setting phases, including retrograde re-entries.
How is Sade Sati different from Dhaiya?
Sade Sati is Saturn over the 12th, 1st and 2nd from the Moon; Dhaiya is the shorter transit over the 4th and 8th from the Moon. Both are reported because both are transit geometry relative to the natal Moon.
Can I get a written interpretation as well as the dates?
Yes. The V2 endpoints return numeric windows; POST /api/v1/astrology/query returns a reading grounded in those same facts with classical attribution.
Is there a way to test before paying?
Yes, the free sandbox serves mock responses with no key so you can build against the shapes first.

Build on the Vedika astrology API

700+ operations, Vedic + Western + KP, 30 languages, an open-source XALEN ephemeris, and a built-in LLM. Free sandbox — no signup.

Try the free sandbox