/api/astro/lal-kitab/varshphal/1 creditLal Kitab varshphal
The Lal Kitab annual chart for a given year. Lal Kitab fixes the houses to the signs: house 1 is ALWAYS Aries, house 2 always Taurus, through to house 12 always Pisces — for every chart, whoever the native is. A planet's house is therefore its sign number, and the ascendant does not move the houses the way it does in Parashari astrology. This means these endpoints will disagree with /api/astro/chart/ and /api/astro/planet-positions/ for almost everyone. That is the system, not an error: they are two different traditions answering two different questions. The progression is arithmetic rather than astronomical. Where the Tajika varshphal at /api/astro/tajika/ casts a real solar-return chart, Lal Kitab advances every planet one house per completed year of age: annual_house = ((natal_house - 1) + age) % 12 + 1 So every planet moves by the same number of houses, and the annual chart returns to the natal arrangement every twelfth year — `full_cycle` marks those years. Age is counted in COMPLETED years as of the birthday in the year you asked for, which is when the varshphal year opens.
https://api.occultapi.com/api/astro/lal-kitab/varshphal/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 |
|---|---|---|---|
| date_time | string (date-time) | required | 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. |
| 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 |
| year | integer | required | Year of birth as a number, e.g. 1990. Four digits. min 1900 · max 2200 |
| ayanamsa | string | optional | Ayanamsa for the underlying sidereal positions. Lal Kitab itself is house-based and does not prescribe one; this is passed through to the position engine. |
| 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/lal-kitab/varshphal/ \
-H "X-API-Key: $OCCULT_API_KEY" \
-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,"year":2027}'Response
{
"data": {
"system": "Lal Kitab",
"year": 2027,
"age": 37,
"year_opens": "2027-08-15",
"method": "((natal_house - 1) + age) % 12 + 1",
"note": "The annual chart is a progression, not a solar return: every planet advances one house per completed year, so the chart repeats every twelve years.",
"ascendant": {
"longitude": 177.7489463338338,
"zodiac_name": "Virgo",
"nakshatra": "Chitra",
"pada": 2
},
"planets": [
{
"planet": "sun",
"natal_house": 4,
"house": 5,
"sign": "Leo",
"pakka_ghar": [
1
],
"in_pakka_ghar": false,
"returned_to_natal": false
},
{
"planet": "moon",
"natal_house": 2,
"house": 3,
"sign": "Gemini",
"pakka_ghar": [
4
],
"in_pakka_ghar": false,
"returned_to_natal": false
},
{
"planet": "mars",
"natal_house": 1,
"house": 2,
"sign": "Taurus",
"pakka_ghar": [
3,
8
],
"in_pakka_ghar": false,
"returned_to_natal": false
},
{
"planet": "mercury",
"natal_house": 5,
"house": 6,
"sign": "Virgo",
"pakka_ghar": [
6,
7
],
"in_pakka_ghar": true,
"returned_to_natal": false
},
{
"planet": "jupiter",
"natal_house": 4,
"house": 5,
"sign": "Leo",
"pakka_ghar": [
2,
5,
9,
12
],
"in_pakka_ghar": true,
"returned_to_natal": false
},
{
"planet": "venus",
"natal_house": 4,
"house": 5,
"sign": "Leo",
"pakka_ghar": [
7
],
"in_pakka_ghar": false,
"returned_to_natal": false
},
{
"planet": "saturn",
"natal_house": 9,
"house": 10,
"sign": "Capricorn",
"pakka_ghar": [
8,
10,
11
],
"in_pakka_ghar": true,
"returned_to_natal": false
},
{
"planet": "rahu",
"natal_house": 10,
"house": 11,
"sign": "Aquarius",
"pakka_ghar": [
12
],
"in_pakka_ghar": false,
"returned_to_natal": false
},
{
"planet": "ketu",
"natal_house": 4,
"house": 5,
"sign": "Leo",
"pakka_ghar": [
6
],
"in_pakka_ghar": false,
"returned_to_natal": false
}
],
"houses": [
{
"house": 1,
"sign": "Aries",
"planets": []
},
{
"house": 2,
"sign": "Taurus",
"planets": [
"mars"
]
},
{
"house": 3,
"sign": "Gemini",
"planets": [
"moon"
]
},
{
"house": 4,
"sign": "Cancer",
"planets": []
},
{
"house": 5,
"sign": "Leo",
"planets": [
"sun",
"jupiter",
"venus",
"ketu"
]
},
{
"house": 6,
"sign": "Virgo",
"planets": [
"mercury"
]
},
{
"house": 7,
"sign": "Libra",
"planets": []
},
{
"house": 8,
"sign": "Scorpio",
"planets": []
},
{
"house": 9,
"sign": "Sagittarius",
"planets": []
},
{
"house": 10,
"sign": "Capricorn",
"planets": [
"saturn"
]
},
{
"house": 11,
"sign": "Aquarius",
"planets": [
"rahu"
]
},
{
"house": 12,
"sign": "Pisces",
"planets": []
}
],
"full_cycle": false
},
"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.