The three signs do not need the same birth details. Each one moves faster than the last, so each needs a more exact input. The Sun sign needs only the date. The Moon sign needs the date and a rough time. The rising sign needs the exact time and the place.
The reason is speed. The Sun stays in one sign for about a month. The Moon stays for about two and a quarter days. The rising sign, or lagna, is the sign coming up in the east when a person is born. It changes every one to two and a half hours, and it depends on where you stand.
Sign | What it is | Input it needs | How long it lasts |
|---|---|---|---|
Sun sign | The sign the Sun was in | Date | 29.5 to 31.5 days |
Moon sign | The sign the Moon was in | Date and rough time | 47 to 61 hours |
Rising sign (lagna) | The sign rising in the east | Exact time and place | 70 to 153 minutes in New York |
Take John Doe, born on Aug 15, 1990, at 10:30 AM in New York. Our API gives him Virgo rising, the Sun in Cancer and the Moon in Taurus. His rising sign would change if his time were 51 minutes later. His Moon sign changed at 7:38 PM that day. His Sun sign changed the next day, at 5:04 PM.
Every number in this post comes from our own API, run on Oct 13, 2026.
Why a Vedic app leads with the Moon sign
All three signs here are measured in the sidereal zodiac, which is fixed to the stars. That is why John's Sun is in Cancer here but in Leo in a Western horoscope. We cover that gap in Vedic vs Western astrology, and in the docs guide on why the signs differ.
In a Vedic app, the Moon sign does most of the work. It is also called the rashi. Transits, meaning where the planets are on a given day, are counted from it, as rule TR-01 states. Daily horoscopes by sign use it too.
The rising sign does a different job. It is house 1 of the chart. Every other house is counted on from it, one sign each, as rule CH-06 states. So a wrong rising sign moves every planet into the wrong house.
The Sun sign plays the smallest part in Vedic work. A profile page can still show it next to the other two.
The Sun sign: the date is enough, almost
The Sun moves about 1° a day. On John's birthday it moved 0.961°. A sign is 30° wide, so the Sun spends about a month in each one.
We asked the API when the Sun changed sign through 1990. Its stays ran from 29.54 days in Capricorn to 31.45 days in Gemini. In 1990 the Sun was in Cancer from Jul 16, 8:43 AM, to Aug 16, 5:04 PM, New York time.
So a date alone is right on most days, but not all of them. On Aug 16, 1990, a baby born in New York in the morning had the Sun in Cancer. A baby born that evening had it in Leo. That happens on 12 days a year, one for each sign change.
The change time also depends on the time zone. 5:04 PM in New York was 2:34 AM on Aug 17 in India. So the same moment falls on different dates in the two places.
The moment also moves from year to year. In 2026 the Sun leaves Cancer on Aug 16 at 10:28 PM, more than 5 hours later than in 1990. A fixed table of Sun-sign dates will be wrong near the edges. Ask the API for the real moment instead.
The Moon sign: the date and a rough time
The Moon is the fastest body in the chart. On John's birthday it moved 14.258° a day, which is about 0.6° an hour.
Over 1990, the Moon finished 159 full stays in a sign. The shortest lasted 47.04 hours and the longest 60.81 hours. The average was 54.60 hours. The Moon speeds up and slows down along its path, so the stays are not equal.
John's Moon entered Taurus on Aug 13 at 5:07 PM. It left on Aug 15 at 7:38 PM, about 9 hours after he was born. A baby born in New York that evening has a Gemini Moon.
Date alone is not enough for the Moon sign. In New York, the Moon changed sign on 160 of the 365 days in 1990. That is 44% of all birth dates. On those days, the birth time decides the answer.
The Moon also sets the nakshatra, or birth star, which changes about once a day. We cover that math in how a nakshatra is calculated.
The rising sign: the exact time and the place
The Earth turns once a day, so all 12 signs rise in turn. That is why the rising sign changes so fast. It also depends on the place. At John's exact moment of birth, Chicago had Virgo rising at 9.10° into the sign, not 19.94°. The Moon sat at the same degree in both cities.
We asked POST /v1/ascendant for New York every 20 minutes through Aug 15, 1990. Then we narrowed each sign change down to the second. Here is that day:
Rising sign | From | To | Minutes |
|---|---|---|---|
Gemini | 1:28 AM | 3:45 AM | 137.7 |
Cancer | 3:45 AM | 6:17 AM | 151.9 |
Leo | 6:17 AM | 8:49 AM | 151.9 |
Virgo | 8:49 AM | 11:20 AM | 151.1 |
Libra | 11:20 AM | 1:53 PM | 152.8 |
Scorpio | 1:53 PM | 4:19 PM | 146.1 |
Sagittarius | 4:19 PM | 6:20 PM | 121.0 |
Capricorn | 6:20 PM | 7:51 PM | 91.0 |
Aquarius | 7:51 PM | 9:04 PM | 73.0 |
Pisces | 9:04 PM | 10:14 PM | 70.0 |
Aries | 10:14 PM | 11:36 PM | 81.6 |

Taurus rose before 1:28 AM and again from 11:36 PM, so the day cut it in two. The signs do not rise at the same speed. In New York, Pisces took 70 minutes and Libra took almost 153.
John was born 100 minutes into his Virgo window and 51 minutes before it ended. Around his birth, the rising point moved 0.198° a minute, or about 1° every 5 minutes. A birth one hour earlier would still give Virgo. A birth one hour later would give Libra.
A time rounded to the hour can give the wrong rising sign for a user born near the edge of a window. The kundli tool shows all three of your signs, with the degree of each.

When the user does not know the time
Never send the date without a time and show the result as if it were exact. In our API, hour and minute are optional and default to 0. A missing time quietly becomes midnight.
For John, a call with no time came back with Taurus rising, not Virgo. The Moon was in Taurus at midnight, but in Gemini by 11:59 PM. The Sun was in Cancer at both ends of the day.
So when the time is unknown, treat each sign on its own:
Sign | What to show without a time |
|---|---|
Sun sign | Show it, unless the Sun changes sign that day |
Moon sign | One sign if the Moon stays in it all day. Two signs if it changes, and ask if the birth was before or after the change |
Rising sign | None. Say that it needs a birth time |
POST /v1/transits/ingresses/Moon answers the Moon check in one call. Send the birth date and place, and ask for a one-day range:
// Which Moon signs are possible on one local date? birth = date and place, no time needed.
async function moonSignsOnDate(birth, date, nextDate) {
const url = `${API_BASE}/v1/transits/ingresses/Moon?from=${date}&to=${nextDate}`;
const response = await fetch(url, {
method: "POST",
headers: { Authorization: `Bearer ${API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify(birth),
});
const data = await response.json();
// One row: the Moon stayed in one sign all day. Two rows: it changed sign that day.
return data.ingresses.map((row) => ({ sign: row.sign, from: row.enters, until: row.leaves }));
}For John's date, Aug 15, 1990, in New York, it returns two rows: Taurus until 7:38:04 PM, then Gemini. For Aug 14, it returns one row, Taurus all day. Times come back in the local time of the place you send.
To see the rising sign, Sun sign and Moon sign for any birth, with the degree of each, try our free kundli tool. For the fields the chart API returns, see the kundli and birth chart API.
Get all three signs in one call
POST /v1/planets returns the rising sign and all nine planets. Here is the request for John Doe, born Aug 15, 1990, at 10:30 AM in New York:
{
"year": 1990,
"month": 8,
"day": 15,
"hour": 10,
"minute": 30,
"latitude": 40.7128,
"longitude": -74.006,
"timezone": "America/New_York"
}And here is the part of the answer a sign finder needs. Signs come by name and by number, where 1 is Aries and 12 is Pisces:
{
"ascendant": { "sign": "Virgo", "sign_number": 6, "degree_in_sign": 19.935074 },
"positions": [
{ "name": "Sun", "sign": "Cancer", "sign_number": 4, "degree_in_sign": 28.77534 },
{ "name": "Moon", "sign": "Taurus", "sign_number": 2, "degree_in_sign": 24.575019 }
]
}Use sign_number in your code and the name on screen. Send lang to get the names in another language. If you need only the rising sign, POST /v1/ascendant returns just that part.

For every field in the answer, with its type, see the API reference.
What to put on the form
The three signs set three rules for your birth form. The date is required for everything. The time decides the Moon sign on 44% of dates and the rising sign on every date. The place sets the time zone, and the rising sign depends on it.
So ask for the time to the minute, and let the user say "I don't know". Ask for a city, not just a country, and send its time zone name, such as America/New_York. The API then applies the daylight saving rules in force on the birth date. For John, it read 10:30 AM as 4 hours behind UTC.
The Sun sign forgives a vague form. The Moon sign forgives a rough time on most days. The rising sign forgives almost nothing, so it should only appear when the form has a real time and a real place.



