Skip to content

Dashas

A dasha system divides life into periods ruled by grahas (or, for Yogini, by the eight yoginis). The starting period depends on the Moon’s nakshatra at birth, and how much of it remains depends on how far the Moon has travelled through that nakshatra.

POST/v1/dasha1 creditReference

POST /v1/kundali also returns the Vimshottari timeline by default; use /v1/dasha when you need only a timeline, a different system or a deeper level.

system Cycle Sequence
vimshottari (default) 120 years Ketu 7, Venus 20, Sun 6, Moon 10, Mars 7, Rahu 18, Jupiter 16, Saturn 19, Mercury 17
yogini 36 years, repeated Mangala 1, Pingala 2, Dhanya 3, Bhramari 4, Bhadrika 5, Ulka 6, Siddha 7, Sankata 8
tribhagi 40 years, run three times The Vimshottari sequence with every period cut to one third

Every timeline covers 120 years from the start of the period running at birth. Yogini lords map to grahas: Mangala to the Moon, Pingala to the Sun, Dhanya to Jupiter, Bhramari to Mars, Bhadrika to Mercury, Ulka to Saturn, Siddha to Venus and Sankata to Rahu.

Terminal window
curl https://api.navapatra.com/v1/dasha \
-H "Authorization: Bearer $NAVAPATRA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"birth": {
"calendar": "BS", "date": "2050-05-12", "time": "14:35",
"place": { "lat": 28.2096, "lng": 83.9856 }
},
"options": { "system": "vimshottari", "levels": 3, "asOf": "2026-11-01T00:00:00Z" }
}'
Option Values Default
system vimshottari, yogini, tribhagi vimshottari
levels 1 maha dasha, 2 adds antar dasha, 3 adds pratyantar dasha 2
asOf An ISO 8601 instant with offset, such as 2026-11-01T00:00:00Z none
yearDays Days per dasha year, up to 400 365.25

The chart options (ayanamsha, nodeType, disambiguation, nepalHistoricOffset) apply too, because they change the Moon’s position.

{
"subject": { "instantUtc": "1993-08-28T08:50:00Z", "tzid": "Asia/Kathmandu", "...": "..." },
"dasha": {
"system": { "id": "vimshottari", "index": 1, "name": "Vimshottari" },
"levels": 3,
"yearDays": 365.25,
"balanceAtBirth": {
"lord": { "id": "sun", "index": 1, "name": "Sun" },
"years": 4.9498
},
"periods": [
{
"lord": { "id": "sun", "index": 1, "name": "Sun" },
"start": "1992-08-09T18:54:18Z",
"end": "1998-08-10T06:54:18Z",
"periods": [
{
"lord": { "id": "sun", "index": 1, "name": "Sun" },
"start": "1992-08-09T18:54:18Z",
"end": "1992-11-27T08:42:18Z",
"periods": [ "..." ]
}
]
}
],
"current": [
{
"level": 1,
"lord": { "id": "rahu", "index": 8, "name": "Rahu" },
"start": "2015-08-10T12:54:18Z",
"end": "2033-08-10T00:54:18Z"
},
{
"level": 2,
"lord": { "id": "ketu", "index": 9, "name": "Ketu" },
"start": "2026-02-08T15:54:18Z",
"end": "2027-02-27T04:12:18Z"
},
{
"level": 3,
"lord": { "id": "jupiter", "index": 5, "name": "Jupiter" },
"start": "2026-09-13T23:40:30Z",
"end": "2026-11-04T02:54:54Z"
}
]
},
"meta": { "engineVersion": "0.1.0", "ayanamsha": { "id": "lahiri", "degrees": 23.773159 }, "...": "..." }
}

How to read it:

  • balanceAtBirth is how much of the first period was left at birth: here 4.9498 years of a 6-year Sun dasha.
  • The first period starts before birth. periods[0].start is when that dasha began, so the timeline lines up with standard tables. Count from subject.instantUtc if you only want the part after birth.
  • Sub-periods follow the same sequence, starting from their parent’s lord, with lengths in proportion to the lords’ years.
  • All instants are UTC, to the second.

current lists the period running at each level at the instant you pass as asOf, from the maha dasha down. It is returned only when you send asOf. The API never reads its own clock for dashas, so the same request returns the same response whenever you make it, which keeps results cacheable and reproducible.

To show “current dasha” in an app, send the current time from your side:

options: { levels: 3, asOf: new Date().toISOString() }

With levels: 3 a 120-year Vimshottari timeline has 729 pratyantar periods. That is fine on /v1/dasha. Inside /v1/kundali, combining level 3 with extra systems and all vargas can pass the 512 KB response limit, which returns 413 response_too_large with a hint about what to drop. See Kundali.

POST /v1/kundali always includes dashas.vimshottari at 2 levels. Add Yogini or Tribhagi with include, and set depth or asOf with options.dasha:

{
"birth": { "calendar": "BS", "date": "2050-05-12", "time": "14:35", "place": { "lat": 28.2096, "lng": 83.9856 } },
"include": ["dashas.yogini", "dashas.tribhagi"],
"options": { "dasha": { "levels": 1, "asOf": "2026-11-01T00:00:00Z" } }
}

The same options.dasha applies to every system in the response.