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
- Rising stage (12th from Moon) — Saturn in the sign before the Moon. Traditionally associated with losses, expenditure and the onset of the cycle.
- Peak stage (1st from Moon) — Saturn over the natal Moon itself. The most discussed phase, linked in classical texts to pressure on the mind and the body.
- Setting stage (2nd from Moon) — Saturn in the sign after the Moon. The release phase, associated with family, speech and accumulated resources.
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.
| Field | Type | Example | Notes |
|---|---|---|---|
| datetime | ISO 8601 | 1990-08-15T14:30:00+05:30 | Local birth time with its UTC offset |
| latitude | number | 19.0760 | Decimal degrees, north positive |
| longitude | number | 72.8777 | Decimal degrees, east positive |
| timezone | IANA string | Asia/Kolkata | Resolves 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
- Cache by birth record, not by user. Sade Sati windows change only when Saturn ingresses a sign — a handful of dates per decade. Compute once, store the windows, and recompute when the current date crosses a boundary.
- Validate timezone before you charge. A missing timezone is the difference between a correct cycle and one off by years. Reject incomplete birth records client-side.
- Handle retrograde re-entries. Near a sign boundary Saturn can ingress, retrograde back, and re-ingress. The dated windows account for this; render the final boundary rather than the first touch.
- Use the sandbox for shape work. Wire request and response handling against the free mock surface before spending a live query.
Key facts
- Sade Sati = transiting Saturn over the 12th, 1st and 2nd signs from the natal Moon, about 7.5 years total in three stages of roughly 2.5 years.
- Dhaiya (Small Panoti) = Saturn over the 4th and 8th signs from the natal Moon; the API can report both.
- Required input: datetime (ISO 8601 with offset), latitude, longitude, IANA timezone. The natal Moon sign is derived from these.
- Computation:
POST /v2/astrology/*. Natural-language reading:POST /api/v1/astrology/query(SSE at/api/v1/astrology/query/stream). - Auth header:
x-api-key: vk_live_*. Base URL:https://api.vedika.io. - Three systems (Vedic, Western, KP) share one birth record; the same API spans 700+ operations across 25 domains and 30 languages.
- Positions come from the XALEN Ephemeris (Apache-2.0), validated against JPL DE440 and swetest within 0.1 degrees across a five-million-chart test.
- Plans start at $12/mo (Starter); per-query cost is roughly $0.01–$0.05. A free sandbox needs no key.
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/queryreturns 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.