When a user does not know their birth time, never fill in a time without telling them. Give the form a "Time not known" choice and mark the profile with it. Then sort every result into three groups. Show the results that hold all day: the weekday, the Sun sign and the signs of the slow planets. Check the Moon sign and birth star for the exact date before you show them. Hide or label the results that change within hours. These are the rising sign, the houses, dasha dates (the dates of planetary periods) and any check that counts houses.
We measured the difference on one real date. Our sample person, John Doe, was born Aug 15, 1990, at 10:30 AM in New York. We asked our API for his chart at every 15 minutes of that day, 96 times in all. His rising sign took 13 values. His first dasha planet (the planet that rules the first period of life) switched at 8:24 AM. His Sun sign and the signs of 7 other planets never changed.
The rest of this guide shows each result, the four common product choices, and what your code sends the API.
How we measured it
We ran John's birth date through the API on Oct 13, 2026. Only the time changed, from midnight to 11:45 PM in 15-minute steps. For each time we asked 5 endpoints for the birth chart, the dasha periods, the doshas, the panchang and the navamsa (D9) chart. The D9 chart splits each sign into 9 parts. That is 480 calls.
Then we counted, for each result, how many of the 96 times gave the same answer as his true time of 10:30 AM. A result that matches at 96 of 96 times is safe without a birth time. A result that matches at 10 of 96 is a guess.
We also wanted to know whether John's date was unusual. So we asked the API for the sky at the first and last second of every day of 1990 in New York. That is 730 more calls.
Safe without time vs needs time
Here is the full list for John's date, from the steadiest result to the least steady.
Result | Changes during the day | Times that match 10:30 AM | Without a birth time |
|---|---|---|---|
Weekday | 0 | 96 of 96 | Safe |
Sun sign | 0 | 96 of 96 | Safe on most days |
Signs of Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu | 0 | 96 of 96 | Safe on most days |
Kaal sarp dosh | 0 | 96 of 96 | Safe on this date |
Manglik, final yes or no | 2 | 91 of 96 | Label it |
Moon sign | 1 (by 7:45 PM) | 79 of 96 | Check the date first |
Tithi (lunar day) | 1 (6:04 PM) | 73 of 96 | Check the date first |
Moon nakshatra (birth star) | 1 (8:24 AM) | 62 of 96 | Check the date first |
First dasha planet | 1 (8:24 AM) | 62 of 96 | Check the date first |
Pitra dosh | 8 | 62 of 96 | Needs time |
Nakshatra pada (quarter) | 4 | 23 of 96 | Needs time |
Rising sign (lagna) | 12 | 10 of 96 | Needs time |
The Moon's house | 13 | 10 of 96 | Needs time |
Navamsa (D9) rising sign | 89 | 10 of 96 | Needs time |
Dasha start and end dates | every step | 1 of 96 | Needs time |
The lagna (rising sign) is the zodiac sign on the eastern horizon at the moment of birth. On John's date it held one sign for 1 to 2.5 hours at a time. Every house is counted from it, so the houses move with it. Our post on Moon sign, Sun sign and rising sign times each rising sign to the minute.
Three rows are doshas, placements that tradition treats as a problem. Manglik looks at Mars and gets its own section below. Kaal sarp dosh asks whether the planets from the Sun to Saturn all sit on one side of Rahu and Ketu. Those two are the Moon's nodes. Pitra dosh looks at the 9th house and its ruler.
The tithi changed at 6:04 PM and the birth star at 8:24 AM. Both times come from the API's daily panchang (the Hindu calendar for one day and place) for that date. The Moon sign changed between 7:30 PM and 7:45 PM.

The Moon decides most of the table
The slower planets rarely change sign within a day. In 1990, the Sun changed sign during the New York day on 12 days. Any planet other than the Moon changed sign on 49 of 365 days. So "safe on most days" means about 87% of days. The other 13% need the same check as the Moon.
The Moon causes most of the trouble. It changed sign during the day on 160 of 365 days in 1990, so the Moon sign held all day on 205 days. That rising sign post found the same 160. It also shows how to check one date for a sign change.
The birth star is a much bigger problem. Nakshatras are the 27 star groups along the Moon's path, and the Moon needs about a day to cross one. In 1990, the Moon stayed in one nakshatra for the whole New York day on just 15 of 365 days. On 338 days it touched two, and on 12 days it touched three.
So for 350 of 365 birth dates, the date alone gives at least two possible birth stars. Our post on how a nakshatra is calculated shows the math behind those edges.
Manglik: a yes that hides a moving part
The manglik check looks at Mars. It asks whether Mars sits in house 1, 2, 4, 7, 8 or 12. The houses are counted three ways: from the rising sign, the Moon and Venus. If any count says yes, the chart is manglik.
For John, the final answer was yes at 91 of 96 times. That looks safe, but the parts underneath were not. The count from the rising sign flipped 6 times during the day. The count from the Moon said yes until 7:30 PM, then no. The count from Venus said no all day.
So between 8 PM and 9 PM, all three counts said no, and John was not manglik. The steady yes came from the Moon count, which held for most of the day. A different birth date can lack that cover.
Pitra dosh behaved the same way. It counts from the rising sign to find the 9th house, so it changed 8 times as the houses moved. Any check that counts houses needs a birth time.
Dasha: the right planet, the wrong dates
Vimshottari dasha splits life into periods, each ruled by one planet. The first period depends on the Moon's birth star at birth. Its length depends on how far the Moon had moved through that star.
Before 8:24 AM, John's first period belonged to the Moon. At 8:24 AM the Moon entered a new birth star, and from then on the first period belonged to Mars. So a date alone did not even give the right first planet.
The dates moved at every step. With a birth at 8:15 AM, his next main period started on Sep 10, 1990. With 8:30 AM, it started on Aug 4, 1997. Within the Mars part of the day, that date ran from Aug 4, 1997, to Nov 2, 1992.
A noon guess gave Jul 2, 1996. His true time gave Dec 20, 1996, so noon was 171 days early. Our post on vimshottari dasha measures the shift per minute of birth time.
Four ways products fill a missing time
There are four common ways to fill the gap. Here is what each one gave for John, against his true chart.
Choice | Time used for John | What it got right | What it got wrong |
|---|---|---|---|
Noon default | 12:00 PM | Moon sign, birth star, pada, first dasha planet, manglik | Rising sign (Libra, not Virgo); dasha dates 171 days early |
Sunrise chart | 6:06 AM | Moon sign, manglik | Birth star (Rohini, not Mrigashira); first dasha planet (Moon, not Mars); rising sign (Cancer) |
Hour left out of the request | Midnight | Moon sign, manglik | Birth star, pada, first dasha planet, rising sign (Taurus) |
Flag the profile and hide | Any | Shows only the safe results | Nothing shown is a guess |
Noon sits in the middle of the day. So the Moon is never more than half a day's travel from its true place, and for John it landed in the right birth star. But the rising sign is still a guess.
A sunrise chart sets the time at sunrise, 6:06 AM for John's date and place. It puts the Sun's sign on the rising sign. Some astrologers use a chart like this, with the Sun's sign as the first house. For John it gave the wrong birth star and the wrong first dasha planet.
Leaving the hour out is the quiet trap. In our API, the hour defaults to 0, so a request with no hour is a chart for midnight. For John, that gave a different birth star and a different first dasha planet, with nothing in the answer to say so.
A flag is the only choice where nothing shown is a guess. Mark the profile as "time unknown" in your own code. Run the chart with one fixed time, such as noon. Then show only the results from the safe rows of the table.
Our own free tools use a simple form of this. The nakshatra finder and the sade sati checker offer an "I do not know the birth time" box. They use noon and say the answer could change with the real time. The kundli, matching and manglik tools ask for a time, because their answers depend on the rising sign.
Try the noon approach on a real date. Enter a birth date in the free nakshatra finder, tick the box for an unknown time, and read the note it shows.

What your code sends the API
The API has no "time unknown" field. Your product owns that flag and decides what to hide. Send the time you chose on purpose, never an empty hour.
For the Moon results, check the birth date before you show them. Ask for the sky at the first and last second of the date, in the birth time zone. Then compare the Moon's birth star at both ends. Each star also names the planet of the first dasha period, so one check covers both results.
const BASE = "https://apiforastrology.com/api/astrology";
const KEY = process.env.ASTROLOGY_API_KEY;
// The Moon at one local moment, from GET /v1/sky.
async function moonAt(date, time, timezone) {
const url = `${BASE}/v1/sky?at=${date}T${time}&timezone=${timezone}`;
const response = await fetch(url, { headers: { Authorization: `Bearer ${KEY}` } });
const sky = await response.json();
return sky.grahas.find((graha) => graha.graha === "Moon");
}
// The Moon at the first and last second of the birth date.
async function birthStarsOnDate(date, timezone) {
const start = await moonAt(date, "00:00:00", timezone);
const end = await moonAt(date, "23:59:59", timezone);
return {
sameAllDay: start.nakshatra === end.nakshatra,
stars: [start.nakshatra, end.nakshatra],
firstDashaPlanets: [start.nakshatra_lord, end.nakshatra_lord],
};
}
await birthStarsOnDate("1990-08-15", "America/New_York");
// { sameAllDay: false, stars: ["Rohini", "Mrigashira"], firstDashaPlanets: ["Moon", "Mars"] }
await birthStarsOnDate("1990-09-02", "America/New_York");
// { sameAllDay: true, stars: ["Shravan", "Shravan"], firstDashaPlanets: ["Moon", "Moon"] }John's date came back with two stars and two possible first dasha planets. Sep 2, 1990, was one of the 15 days with one star all day. On a fast day the Moon can touch three stars. So read sameAllDay: false as "ask for a birth time", not as a full list of choices.
Some routes need no birth time at all. GET /v1/rashi/{sign}/today gives a daily reading from the Moon sign alone. GET /v1/tara rates a day from the birth star alone. POST /v1/matching/nakshatra scores a couple from two birth stars and their padas. Our post on kundli matching for matrimony sites found that a guessed hour gave John the true match score in only 11 of 24 hours.
See every field in a chart. The kundli and birth chart feature page lists what POST /v1/planets returns. The charts reference shows every request field, including the hour and its default.

Checklist for a missing birth time
Step | What to build |
|---|---|
Sign-up form | Date, place, and a time field with a "Time not known" choice |
Profile | A "time unknown" flag in your own records |
Chart call | One fixed time, such as noon, sent on purpose |
Moon check |
|
Screens to show | Weekday, Sun sign, slow-planet signs, and the Moon results that passed the check |
Screens to hide | Rising sign, houses, divisional charts, dasha dates, house-based doshas |
Later | A way to add the birth time, which unlocks the hidden screens |
The short version
A birth date alone fixes the slow planets. It does not fix the Moon's birth star on 350 of 365 days, and it never fixes the rising sign. On John Doe's date, the rising sign took 13 values and the first dasha planet switched at 8:24 AM. A noon guess put his dasha dates 171 days early.
So flag a missing time in your own product. Show what holds all day, check the Moon, and hide what counts houses until the user adds a birth time.



