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}'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.
| 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 |