/api/astro/dasha/drill/1 creditDasha drill-down
One branch of a dasha tree, instead of the whole thing. levels on the other dasha endpoints caps DEPTH, but still returns every period at that depth: levels=3 on Vimshottari is every pratyantardasha under every antardasha under every mahadasha, which is about 95 KB. A screen where someone taps one mahadasha to expand it needs a single branch of that. Give this endpoint the chain of lords to follow and it returns only what sits under the period you named. {"lords": ["moon", "mars"], "levels": 1} returns the pratyantardashas inside the Moon mahadasha's Mars antardasha — roughly 1.8 KB against the 95 KB of the tree that contains it. Lord names are matched case-insensitively, and path in the response echoes the chain that was actually matched. Use a planet name for the nakshatra dashas and a sign name for the Jaimini rashi dashas; an unrecognised lord returns 400 listing what was available at that level. This saves TRANSFER, not COMPUTATION. The engine still builds the tree to the depth you asked for and this discards the rest, so a drill is no faster to compute than the equivalent levels= call. What it saves is bandwidth, JSON parsing, and the memory a browser or phone spends holding a tree it is showing one branch of.
https://api.occultapi.com/api/astro/dasha/drill/Authentication
Send your key in the X-API-Key header. Keys are server-side credentials — never put one in browser JavaScript or a mobile app.
X-API-Key: yt_live_a1b2c3d4_…
Content-Type: application/jsonRequest fields
| Field | Type | Required | Notes |
|---|---|---|---|
| latitude | number (double) | required | Latitude of the place, in decimal degrees. Positive is north, negative is south. Example: 26.9124 for Jaipur, 40.7128 for New York. Minutes and seconds are not accepted - convert first. min -90 · max 90 |
| longitude | number (double) | required | Longitude of the place, in decimal degrees. Positive is east, negative is west. Example: 75.7873 for Jaipur, -74.0060 for New York. Note the sign: a missing minus puts New York in China. min -180 · max 180 |
| dasha_direction | string | optional | forwardbackward |
| dasha_start | string | optional | Which cycle the timeline opens on. currentnextprevious |
| date_time | string (date-time) | optional | The moment to calculate for, ISO 8601. ALWAYS include an offset or a trailing Z - a value with no zone is read as Asia/Kolkata (UTC+05:30), not UTC, and can return the previous day's result with a 200. '2026-09-01T06:00:00Z' and '2026-09-01 06:00:00' are different instants and give different answers. |
| datetime | string (date-time) | optional | The moment to calculate for, ISO 8601. ALWAYS include an offset or a trailing Z - a value with no zone is read as Asia/Kolkata (UTC+05:30), not UTC. Same meaning as date_time, which other endpoints call the same thing by a different name. |
| days_in_year | number (double) | optional | Year length the periods are measured in. 360 for the classical savana year, 365.25 for the Julian year. min 360 · max 365.256364 |
| levels | integer | optional | How many levels BELOW the located period to return. 1 gives its immediate children. min 1 · max 4 |
| lords | array | optional | The chain of period lords to follow from the top, outermost first — e.g. ["moon", "mars"] means "inside the Moon mahadasha, inside its Mars antardasha". A planet name for nakshatra dashas, a sign name for rashi dashas. Empty returns the top level. |
| node | string | optional | Lunar node model. Required by the rashi parent, which does not default it; defaulted here. truemean |
| system | string | optional | Dasha system. See /api/astro/dasha/systems/. Defaults to Vimshottari. |
| timezone_as_float | number (double) | optional | UTC offset of the place, in hours, as a decimal. Example: 5.5 for India (UTC+05:30), -5 for New York in winter, 5.75 for Nepal. This is NOT validated against date_time - if the two disagree you get a successful response for the wrong moment, so derive both from the same source. Use the offset in force on that date, not today's: a summer birth in a country with daylight saving needs the summer offset. min -12 · max 14 |
Example request
curl -X POST https://api.occultapi.com/api/astro/dasha/drill/ \
-H "X-API-Key: $OCCULT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"latitude":26.9124,"longitude":75.7873,"dasha_direction":"forward","dasha_start":"current","date_time":"2026-09-01 06:00:00","node":"true","timezone_as_float":5.5}'Response
{
"data": {
"system": "Vimshottari",
"engine_id": "VimshottariDasha",
"family": "nakshatra",
"lord_type": "planet",
"levels": 1,
"level_names": [
"mahadasha"
],
"cycle_years": 120,
"conditional": false,
"path": [],
"depth": 0,
"child_level": "mahadasha",
"periods": [
{
"lord": "ketu",
"start": "2025-11-21 14:30:19.062048+00:00",
"end": "2032-11-21 08:30:19.062048+00:00",
"children": []
},
{
"lord": "venus",
"start": "2032-11-21 08:30:19.062048+00:00",
"end": "2052-11-21 08:30:19.062048+00:00",
"children": []
},
{
"lord": "sun",
"start": "2052-11-21 08:30:19.062048+00:00",
"end": "2058-11-21 20:30:19.062048+00:00",
"children": []
},
{
"lord": "moon",
"start": "2058-11-21 20:30:19.062048+00:00",
"end": "2068-11-21 08:30:19.062048+00:00",
"children": []
},
{
"lord": "mars",
"start": "2068-11-21 08:30:19.062048+00:00",
"end": "2075-11-22 02:30:19.062048+00:00",
"children": []
},
{
"lord": "rahu",
"start": "2075-11-22 02:30:19.062048+00:00",
"end": "2093-11-21 14:30:19.062048+00:00",
"children": []
},
{
"lord": "jupiter",
"start": "2093-11-21 14:30:19.062048+00:00",
"end": "2109-11-22 14:30:19.062048+00:00",
"children": []
},
{
"lord": "saturn",
"start": "2109-11-22 14:30:19.062048+00:00",
"end": "2128-11-22 08:30:19.062048+00:00",
"children": []
},
{
"lord": "mercury",
"start": "2128-11-22 08:30:19.062048+00:00",
"end": "2145-11-22 14:30:19.062048+00:00",
"children": []
}
],
"metadata": {
"calculation_time_ms": 0,
"max_levels": 1,
"data_size_bytes": 1171,
"data_size_mb": 0,
"structure": "nested_hierarchical"
},
"boundary_note": "The last sub-period of each period ends 18 hours before its parent does. Sibling periods are contiguous and the first child starts with its parent, but the final 18 hours of every period have no sub-period covering them. This comes from the calculation engine and is reported rather than hidden."
},
"status": 200,
"is_error": false,
"message": "successful"
}Captured from a real call using the exact request above. Results sit under data.
Errors
Metering errors return { "error": "…", "message": "<code>", "is_error": true }. Show error to people and branch on message. See the error reference.