curl -X POST https://yogataraapi.prahlad.app/api/astro/chinese/four-pillars/ \
-H "X-API-Key: $OCCULT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"date_time":"1984-06-15T14:30:00+08:00","latitude":39.9042,"longitude":116.4074,"timezone_as_float":8}'The four pillars of a birth: year, month, day and hour. Each pillar is a heavenly stem over an earthly branch, and the sixty combinations of the two make the sexagenary cycle. The day's stem is the DAY MASTER — the single most important element in the chart, since everything else is read as its relationship to that. The Chinese year begins at LICHUN — the moment the Sun reaches 315 degrees of tropical longitude, around 4 February. Not 1 January, and not Chinese New Year, which is a lunar date drifting between 21 January and 20 February and governs the festival rather than the chart. Someone born on 20 January 2024 has 2023's pillar: a Water Rabbit, not a Wood Dragon. This is the single thing cheap implementations get wrong, and it misassigns the year for everyone born in January. Month pillars are bounded the same way, by the twelve major solar terms, so a month boundary is an astronomical instant and can fall at any hour of any day rather than on the first of a calendar month. Two conventions are exposed because practitioners genuinely differ and both change the answer. `day_boundary` decides whether the day turns at 23:00 (traditional) or midnight. `true_solar_time` corrects the clock for the birthplace's distance from its timezone meridian — about fourteen minutes for Beijing — which can move the hour pillar by one place.
| 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. |
| day_boundary | string | optional | When the day pillar changes. 'zi_hour' is 23:00, the traditional rule; 'midnight' is what most software uses. They disagree for births between 23:00 and 24:00. zi_hourmidnight |
| keys | array | optional | Which calculations to return, as a list of names. See the key table for this endpoint; an unrecognised name rejects the whole request. One call costs one credit however many keys you ask for, so request everything you need at once rather than making several calls. |
| latitude | number (double) | optional | 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. |
| longitude | number (double) | optional | 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. |
| orb_factor | number (double) | optional | Scale every aspect orb. 0.5 halves them, 2 doubles them. min 0.1 · max 2 |
| 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 |
| true_solar_time | boolean | optional | Correct the hour by the longitude's offset from the timezone meridian. Traditional practice uses true local solar time and it can move the hour pillar by one place. |