Skip to main content

Western Lunar Return

Next lunar return chart after a given date. Finds the next moment the Moon returns to its natal tropical longitude (~every 27.3 days) and builds a complete Western natal chart for that moment at the birth location.

Endpoint

POST /v1/western/lunar-return

Request parameters

FieldTypeRequiredDescription
locationstring | nullNoCity name to resolve to lat/lon/tz automatically. Example: 'Mumbai' or 'New Delhi, India'. If provided, latitude, longitude and timezone are not required.
namestringNoPerson name associated with the birth record
datestringYesBirth date in YYYY-MM-DD format
timestring | nullNoBirth time in HH:MM 24-hour format. If omitted, sunrise chart is used as fallback.
latitudenumber | nullNoLatitude. Required if location not provided.
longitudenumber | nullNoLongitude. Required if location not provided.
timezonestring | nullNoIANA timezone. Required if location not provided.
ayanamsastringNoSidereal ayanamsa mode used in calculations
after_datestring | nullNoFind the next lunar return after this date (YYYY-MM-DD). Defaults to today.

Example request

curl -X POST "https://api.asterwise.com/v1/western/lunar-return" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Arjun Mehta","date":"1985-11-12","time":"06:45","latitude":19.076,"longitude":72.8777,"timezone":"Asia/Kolkata","after_date":"2026-01-01"}'

Example response

{
"success": true,
"message": "success",
"data": {
"planet": "Moon",
"natal_longitude": 221.838294,
"return_utc": "2026-01-12T10:46:09Z",
"return_jd": 2461052.948719,
"chart": {
"zodiac": "tropical",
"house_system": "placidus",
"ascendant": {
"longitude": 85.365296,
"sign": "Gemini",
"sign_index": 2,
"degree_in_sign": 25.365296
},
"mc": {
"longitude": 345.187359,
"sign": "Pisces",
"sign_index": 11,
"degree_in_sign": 15.187359
},
"planets": [
{
"name": "Sun",
"longitude": 292.233418,
"sign": "Capricorn",
"sign_index": 9,
"degree_in_sign": 22.233418,
"house": 8,
"is_retrograde": false,
"dignity": "peregrine",
"dignity_score": 0,
"is_exaltation_degree": false,
"dignity_disputed": false
},
{
"name": "Moon",
"longitude": 221.838251,
"sign": "Scorpio",
"sign_index": 7,
"degree_in_sign": 11.838251,
"house": 5,
"is_retrograde": false,
"dignity": "fall",
"dignity_score": -4,
"is_exaltation_degree": false,
"dignity_disputed": false
},
"... and 8 more items"
],
"houses": [
{
"house": 1,
"cusp_longitude": 85.365296,
"sign": "Gemini",
"sign_index": 2,
"degree_in_sign": 25.365296
},
{
"house": 2,
"cusp_longitude": 110.057861,
"sign": "Cancer",
"sign_index": 3,
"degree_in_sign": 20.057861
},
"... and 10 more items"
],
"aspects": [
{
"planet_a": "Jupiter",
"planet_b": "Mars",
"type": "opposition",
"exact_angle": 178.322,
"orb": 1.678,
"is_applying": false
},
{
"planet_a": "Jupiter",
"planet_b": "Mercury",
"type": "opposition",
"exact_angle": 176.6964,
"orb": 3.3036,
"is_applying": true
},
"... and 11 more items"
],
"elements": {
"fire": 0,
"earth": 5,
"air": 1,
"water": 4,
"dominant": "earth"
},
"modalities": {
"cardinal": 5,
"fixed": 3,
"mutable": 2,
"dominant": "cardinal"
},
"hemisphere": {
"eastern": 8,
"western": 2,
"northern": 2,
"southern": 8
},
"ayanamsa_value": 0.0,
"ayanamsa_used": "tropical",
"birth_time_provided": true
}
}
}

Response fields

FieldTypeDescription
successbooleanTrue if the request succeeded
messagestringHuman-readable status message
dataobject
data.planetstring
data.natal_longitudenumberNatal longitude of the return planet (tropical)
data.return_utcstringExact UTC moment of return (ISO 8601)
data.return_jdnumberJulian Day of return moment
data.chartobject
data.chart.zodiacstringAlways 'tropical' for Western natal
data.chart.house_systemstringHouse system used
data.chart.ascendantobject
data.chart.ascendant.longitudenumberTropical ecliptic longitude 0–360°
data.chart.ascendant.signstringZodiac sign name
data.chart.ascendant.sign_indexintegerSign index 0=Aries … 11=Pisces
data.chart.ascendant.degree_in_signnumberDegrees within sign 0–29.999
data.chart.mcobject
data.chart.mc.longitudenumberTropical ecliptic longitude 0–360°
data.chart.mc.signstringZodiac sign name
data.chart.mc.sign_indexintegerSign index 0=Aries … 11=Pisces
data.chart.mc.degree_in_signnumberDegrees within sign 0–29.999
data.chart.planetsarray[object]
data.chart.planets[].namestringPlanet name
data.chart.planets[].longitudenumberTropical ecliptic longitude 0–360°
data.chart.planets[].signstringZodiac sign name
data.chart.planets[].sign_indexinteger
data.chart.planets[].degree_in_signnumberDegrees within sign 0–29.999
data.chart.planets[].houseintegerHouse number (Placidus or chosen system)
data.chart.planets[].is_retrogradeboolean
data.chart.planets[].dignitystringEssential dignity: domicile | exaltation | detriment | fall | peregrine
data.chart.planets[].dignity_scoreintegerEssential dignity weight: domicile=5, exaltation=4, detriment=-5, fall=-4, peregrine=0
data.chart.planets[].is_exaltation_degreebooleanTrue if planet is in the exact classical exaltation degree (Nth degree = N-1°00' to N-1°59'59"). Always false for outer planets (no exact degree defined).
data.chart.planets[].dignity_disputedbooleanTrue for outer planet (Uranus/Neptune/Pluto) exaltation/fall — no classical consensus.
data.chart.housesarray[object]
data.chart.houses[].houseinteger
data.chart.houses[].cusp_longitudenumberTropical ecliptic longitude of house cusp
data.chart.houses[].signstring
data.chart.houses[].sign_indexinteger
data.chart.houses[].degree_in_signnumber
data.chart.aspectsarray[object]
data.chart.aspects[].planet_astring
data.chart.aspects[].planet_bstring
data.chart.aspects[].typestringAspect type: conjunction | opposition | trine | square | sextile | semisextile | semisquare | sesquiquadrate | quincunx
data.chart.aspects[].exact_anglenumberActual angular distance between planets
data.chart.aspects[].orbnumberDifference from exact aspect angle (always positive)
data.chart.aspects[].is_applyingbooleanTrue if the faster planet is moving toward exact aspect (orb decreasing).
data.chart.elementsobject
data.chart.elements.fireinteger
data.chart.elements.earthinteger
data.chart.elements.airinteger
data.chart.elements.waterinteger
data.chart.elements.dominantstring | nullMost common element, or null if tied
data.chart.modalitiesobject
data.chart.modalities.cardinalinteger
data.chart.modalities.fixedinteger
data.chart.modalities.mutableinteger
data.chart.modalities.dominantstring | null
data.chart.hemisphereobject
data.chart.hemisphere.easternintegerPlanet count in houses 7–12
data.chart.hemisphere.westernintegerPlanet count in houses 1–6
data.chart.hemisphere.northernintegerPlanet count in houses 1–6 (below horizon)
data.chart.hemisphere.southernintegerPlanet count in houses 7–12 (above horizon)
data.chart.ayanamsa_valuenumberAlways 0.0 — tropical zodiac
data.chart.ayanamsa_usedstring
data.chart.birth_time_providedbooleanWhether a precise birth time was provided. False when birth time was not supplied or treated as unknown — calculations using this field will have lagna-dependent accuracy limits.

Errors

CodeDescriptionReference
authentication_failedMissing or invalid API key.authentication_failed
ephemeris_unavailableUpstream ephemeris service error.ephemeris_unavailable
insufficient_tierAPI key tier does not include this endpoint.insufficient_tier
internal_errorUnexpected server error.internal_error
ip_rate_limit_exceededToo many requests in a short window.ip_rate_limit_exceeded
payload_too_largeRequest body exceeds the size limit.payload_too_large
resource_not_foundReferenced resource was not found.resource_not_found
validation_errorRequest body failed schema validation.validation_error