A personal year number names the theme of one year for one person, as a single digit from 1 to 9. You need three inputs: the month of birth, the day of birth and the year you want to read. Reduce each one: add up its digits, and repeat while the result still has two digits. Then add the three and reduce that sum too.
Take our sample person, John Doe, born Aug 15, 1990. August, his birth month, is 8. The day, 15, turns into 1 + 5 = 6. For 2026, the year's digits make 10, then 1. The total is 8 + 6 + 1 = 15, which reduces to 6. For 2027, the digits make 11, then 2. The total becomes 8 + 6 + 2 = 16, which reduces to 7. So John's personal year 2027 is a 7.
When does the number change? Our API switches to the new number on January 1, for everyone. Its answer says so, and the rule is fixed in the core's code. Some guides count from the birthday instead. By that rule, John stays in his 6 year until Aug 14, 2027. The two rules give him different numbers on 226 days of 2027. So a "year ahead" screen should name the rule it follows.
John Doe's personal year number for 2026 and 2027
We sent John's birth date to POST /v1/cycles on October 19, 2026. The route takes one more input, as_of, the date you want the numbers for. Here is the sum the API runs, laid out for both years.
Step | 2026 | 2027 |
|---|---|---|
Birth month (August) | 8 | 8 |
Day of birth (15) | 1 + 5 = 6 | 1 + 5 = 6 |
Calendar year | 2 + 0 + 2 + 6 = 10, then 1 | 2 + 0 + 2 + 7 = 11, then 2 |
Total | 8 + 6 + 1 = 15 | 8 + 6 + 2 = 16 |
Personal year | 1 + 5 = 6 | 1 + 6 = 7 |
Our API reduces each part on its own first, then adds the three and reduces the total. Since the birth year never enters the sum, everyone born on Aug 15 shares John's personal year, whatever year they were born.
Then we moved as_of across the turn of the year and past John's 2027 birthday. Each row is a real answer from the API.
| Year number | Month number | Day number |
|---|---|---|---|
2026-10-29 | 6 | 7 | 9 |
2026-12-31 | 6 | 9 | 4 |
2027-01-01 | 7 | 8 | 9 |
2027-08-14 | 7 | 6 | 2 |
2027-08-15 | 7 | 6 | 3 |
The year number moved once, between Dec 31 and Jan 1. John's birthday on Aug 15, 2027 changed nothing. For a 7 year, the API's own reading is short: "A year to slow down, learn and reflect. Make time for yourself."
January 1 or the birthday: which rule the API uses
The choice is written down in three places. The core's Western numbers module fixes the start of each personal year at January 1. The about line in every cycles answer tells the user the number changes on January 1. The Western route, POST /v1/western, returns a basis block that spells out each choice where numerology books disagree. Its personal year line reads like this:
"basis": {
"personal_year": "Counted on the calendar year, from January 1."
}Most outside pages we checked also turn the year on January 1. One personal year calculator page calls the calendar rule the most common one. One blog takes the other side: personal years run from birthday to birthday. That method uses the year of the latest birthday in place of the calendar year. One glossary page sets out the split by name. Hans Decoz and Matthew Goodwin count from January 1. Faith Javane and Dusty Bunker count from the birthday. Decoz's own site keeps January to December. It also describes overlap months near each end, when the old year fades and the next one starts to show.
The gap depends on the birthday. We ran both rules over every day of 2027 for four birthdays. Our script first checked its calendar-rule math against 20 saved API answers, and all 20 matched.
Birthday | Days of 2027 the rules disagree | Which days |
|---|---|---|
Jan 1 | 0 | none |
Mar 22 (Jane Doe) | 80 | Jan 1 to Mar 21 |
Aug 15 (John Doe) | 226 | Jan 1 to Aug 14 |
Dec 31 | 364 | Jan 1 to Dec 30 |
On every one of those days, the birthday rule shows last year's number. For John, that is 6 where our API says 7. Someone born on Dec 31 would see last year's number for almost the whole year.

So in March, a user who checks another site may see 6 where your screen says 7. Neither number is a math error.
The 9-year cycle in plain words
A personal year never jumps around. It steps up by 1 every January, and after 9 it starts again at 1. The reason sits in the calendar year. Each new year moves the year's own digit up by one: 2026 gives 1, 2027 gives 2, 2028 gives 3. The birth month and day stay the same, so the total climbs by 1 as well.
We asked the API for John's number in the middle of each year from 2021 to 2030. The themes are our short summaries of the readings it returned.
Year | John's personal year | Theme, in a few words |
|---|---|---|
2021 | 1 | new starts |
2022 | 2 | patience and partners |
2023 | 3 | friends and sharing ideas |
2024 | 4 | steady work |
2025 | 5 | change and movement |
2026 | 6 | home and family |
2027 | 7 | rest, study and thought |
2028 | 8 | career and money |
2029 | 9 | finishing and letting go |
2030 | 1 | new starts again |
John's current cycle opened with his 1 year in 2021. It closes with his 9 year in 2029, and 2030 opens the next one. Guides call each run of 9 years one cycle, and the personal year tells you where a person stands in it.
The personal month and day sit inside the year. The month is the personal year plus the calendar month, reduced. The day is the personal month plus the day of the month, reduced. So John's December 2026 is 6 + 12 = 18, then 9. His January 2027 is 7 + 1 = 8. The month jumps from 9 to 8 at New Year, not to 1. A daily screen has rules of its own, so this post stays with the year. The personal month entry in our glossary shows the month sum.
Two smaller differences between guides
Adding every digit at once. Some guides skip the step-by-step cuts. They add 8, 1, 5, 2, 0, 2 and 7 in one go. That gives 25, then 7, the same answer. We checked every birthday against every year from 1900 to 2200. Summing every digit in one pass always landed on the same number from 1 to 9 as our API.
Stopping at a master number. Some guides keep 11, 22 and 33 whole and call them master numbers. One guide we read works out July 15 in 2025: 7 + 6 + 9 = 22, and it keeps 22. Our API returned 4 for that birthday in that year. In this API, a personal year is always 1 to 9. Our master numbers guide shows where the API keeps them and where it does not. If your users come from a guide that keeps 22, add one line saying your app reduces it.
What one cycles call returns
Here is the request. It reads John's numbers for New Year's Day 2027.
John Doe, born Aug 15, 1990, read for Jan 1, 2027.
curl -X POST "https://apiforastrology.com/api/numerology/v1/cycles?as_of=2027-01-01" \
-H "Authorization: Bearer $ASTROLOGY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"birth_date":"1990-08-15"}'The answer, trimmed. Each of year, month and day also holds about and reading. The year block adds do and avoid, and a not_claimed line closes the answer.
{
"birth_date": "1990-08-15",
"as_of": "2027-01-01",
"year": { "number": 7 },
"month": { "number": 8 },
"day": { "number": 9 },
"localization": { "lang": "en", "detail": "standard", "fell_back_to_en": [], "fell_back_to_standard": [] }
}The year block carries the most text. The about line says what the number is and when it changes. The reading gives the theme. The do and avoid fields each hold a few plain steps for the year, about 250 characters long. The month and day blocks are smaller: the number, its about line and one reading.
Two settings change the words, not the numbers. Add lang=hi, and the same call comes back in Hindi with year 7, month 8 and day 9. Add detail=expanded, and the year reading grows from 63 characters to 557. The do and avoid texts keep one length. The localization block tells you if any text fell back to English or to the standard length.
Bad input is refused with a reason. We sent Feb 30, 2027 as as_of. The API answered 422, with invalid_input as the code and query.as_of as the field. A body with no birth date got the same code, with birth_date as the field. On a live key, each cycles call uses 2 reading credits. Our numerology API quickstart walks through a first call, from the key to the answer.
A year for a mulank is a different number
GET /v1/year/{mulank} needs no birth date. You pass a mulank (the birth day reduced to one digit, from 1 to 9) in the path. A year goes in the query, or the route reads this year. The calendar year itself reduces to one digit, shared by everyone, which numerology calls the universal year. For 2027 it is 11, then 2. In Indian numerology, 2 belongs to the Moon.
John's mulank is 6, from the 15th, as our guide to the mulank and bhagyank shows. Its planet is Venus. The route then checks how Venus treats the Moon in the traditional planet friendship table. The answer is unfriendly, so the outcome code is difficult and the label reads "Not a good fit". Our free numerology calculator finds the mulank for any birth date.
Mulank 6 in 2027, trimmed. The full answer adds about, a reading and a theme for the year, a theme for each month, and the not_claimed line.
curl "https://apiforastrology.com/api/numerology/v1/year/6?year=2027" \
-H "Authorization: Bearer $ASTROLOGY_API_KEY"{
"mulank": 6,
"mulank_planet": "Venus",
"year": 2027,
"year_number": {
"number": 2,
"planet": "Moon",
"relation": "enemy",
"relation_name": "unfriendly",
"via": [],
"outcome": "difficult",
"outcome_name": "Not a good fit"
},
"months": [
{ "month": 1, "month_name": "January", "number": 3, "planet": "Jupiter", "outcome": "neutral", "outcome_name": "Neutral" }
]
}The months list has 12 entries. Each month's number is the year's 2 plus the month, reduced, so January 2027 is 3 and February is 4. Each month gets its own outcome against the mulank. For mulank 6, February, March, April, June, November and December come back Good fit.
See all four date routes. Our personal year API page lists the cycles, good dates, mulank year and day routes, with what each returns.

Now set the two routes side by side for John in 2027.
Point | Personal year | Year for a mulank |
|---|---|---|
Route |
|
|
You send | a birth date, and | a mulank from 1 to 9, and |
John in 2027 | 7 | the year's 2, read against his 6 |
Shared by | everyone born on Aug 15 | everyone with mulank 6 |
What comes back | a theme, with do and avoid | an outcome, a theme and 12 months |
Where it comes from | Western numerology | Indian numerology, through planets |
The two numbers answer different questions. The personal year places a person somewhere in a 9-year cycle. The mulank year says how one birth day number gets along with the calendar's own number. Do not put both on one card called "your 2027 number". Give each its own label, as our universal year entry does.
Build decisions for a year-ahead screen
Send the user's own date in as_of. A personal year turns at midnight on January 1, but whose midnight? Take one moment: 3:30 AM UTC on Jan 1, 2027. In New York it is still 10:30 PM on Dec 31, 2026, and John's personal year is 6. In India it is already 9:00 AM on Jan 1, and his personal year is 7. We sent both local dates and got both numbers. Work out the date from the user's own time zone, on the device or from their settings.
Send a plain date. as_of takes YYYY-MM-DD. We sent a timestamp with a time in it, 3:30 AM UTC on Jan 1, 2027. The API refused it with 422, saying a date needs zero time. Turn the moment into the user's local date first, then send only the date.
Do not leave as_of out on a personal screen. Without it, the API falls back to the date on its own clock. Our run with no as_of came back with Oct 19, 2026. Near midnight, the API's date can be a day away from the user's.
Ask again whenever the screen opens. The year changes only on the user's January 1. The month changes when a new month begins, and the day at each midnight. One call returns all three for the date you send. So request the numbers for the user's date each time the screen opens. A New Year message should go out after the user's own midnight, not the server's.
Name the rule under the number. One short line is enough: "Counted from January 1." That is what basis.personal_year says in the Western answer. A user who learned the birthday rule then knows why your March says 7.
Show a theme, not a forecast. The reading, do and avoid describe what a year leans toward. They name a focus, not events to come. Write any extra copy the same way: "a year to learn and slow down", never "you will change jobs". Keep the not_claimed line on screen. It tells users that a number shows a leaning and settles nothing. Our numerology app development guide puts this screen among the six a numerology app needs.
New to the terms? The personal year entry in our glossary defines the number in a few lines, with links to the month and day terms.

The short version
A personal year number reduces the month of birth, the day of birth and the calendar year, then reduces their sum. For John Doe, 2026 is a 6 year and 2027 is a 7 year. Our API moves to the new number on January 1, as its about and basis lines state. Birthday-based guides show last year's number until the birthday, and for John the two rules split on 226 days of 2027. An app gets each user's own year by sending that user's local date in as_of.



