Forecast
Dated facts for a chart: dasha changes, Sade Sati and Dhaiya, sign changes, natal degree hits, a monthly digest and the solar return. It says what happens and when, not what it will bring.
Dasha changes, Sade Sati and Dhaiya, and Jupiter, Saturn and Rahu sign changes, in date order
POST/v1/forecast/timeline
3 credits · Secret key (test or live) · getForecastTimeline · Page for this operation
At most 5 years. Times are UTC. Descriptive: it says what happens and when, not what it will bring.
Request body
birthBirth requireddatestring (date) requirede.g.
"1990-08-13"timestringpattern
^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$· e.g."06:30"time_accuracystringWith "unknown", lagna- and house-dependent fields are omitted and listed in warnings — never filled with a noon default.
one of
exact,approximate,unknown· default"exact"placeCoordinates or object or object requiredCoordinates, a place_id from /v1/places/search, or a free-text query. A vague query returns 422 place_ambiguous with candidates; the API never guesses.
One of:
- Coordinates
Fields
latitudenumber required≥ -90 · ≤ 90
longitudenumber required≥ -180 · ≤ 180
No other fields are accepted.
- object
Fields
place_idstring required
No other fields are accepted.
- object
Fields
querystring requiredat least 2 characters · at most 120 characters
No other fields are accepted.
- Coordinates
timezonestring"auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".
default
"auto"
No other fields are accepted.
fromstring (date) requirede.g.
"1990-08-13"tostring (date) requiredInclusive. At most 5 years from from.
e.g.
"1990-08-13"optionsobjectlangstring requiredone of
en,hi· default"en"
No other fields are accepted.
No other fields are accepted.
Response
JSON { data, meta, warnings }, where data is:
fromstring (date) requirede.g.
"1990-08-13"tostring (date) requirede.g.
"1990-08-13"running_at_startobject requiredmahadashaobject or null requiredOne of:
- object
Fields
lordstring requireduntilstring (date-time) required
- null
- object
antardashaobject or null requiredOne of:
- object
Fields
lordstring requireduntilstring (date-time) required
- null
- object
saturn_periodobject or null requiredOne of:
- object
Fields
periodstring requireduntilstring (date-time) required
- null
- object
countinteger requiredeventsarray of object requiredatstring (date-time) requiredkindstring requiredone of
mahadasha_start,antardasha_start,saturn_period_start,saturn_period_end,sign_change,conjunction,oppositionsummarystring requiredlordstringmahadashastringuntilstring (date-time)periodstringplanetstringsignstringhouse_from_moonintegerhouse_from_lagnaintegernatal_pointstring or nullOne of:
- string
- null
retrogradeboolean
notestring required
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl -X POST 'https://api.astrologics.in/v1/forecast/timeline' \
-H 'Authorization: Bearer al_test_YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"birth":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"from":"2026-11-01","to":"2027-12-31"}'
Node.js
const res = await fetch("https://api.astrologics.in/v1/forecast/timeline", {
method: "POST",
headers: { Authorization: "Bearer al_test_YOUR_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"birth": {
"date": "1990-08-13",
"time": "06:30",
"place": {
"latitude": 28.6139,
"longitude": 77.209
}
},
"from": "2026-11-01",
"to": "2027-12-31"
}),
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
body = {
"birth": {
"date": "1990-08-13",
"time": "06:30",
"place": {
"latitude": 28.6139,
"longitude": 77.209,
},
},
"from": "2026-11-01",
"to": "2027-12-31",
}
req = urllib.request.Request(
"https://api.astrologics.in/v1/forecast/timeline",
method="POST",
headers={"Authorization": "Bearer al_test_YOUR_KEY", "Content-Type": "application/json"},
data=json.dumps(body).encode(),
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/forecast/timeline');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"birth":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"from":"2026-11-01","to":"2027-12-31"}',
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 2,745 characters
{
"data": {
"from": "2026-11-01",
"to": "2027-12-31",
"running_at_start": {
"mahadasha": {
"lord": "rahu",
"until": "2044-06-21T04:53:13.747Z"
},
"antardasha": {
"lord": "rahu",
"until": "2029-03-03T21:05:13.747Z"
},
"saturn_period": {
"period": "sade_sati",
"until": "2032-05-30T21:29:10.451Z"
}
},
"count": 6,
"events": [
{
"at": "2026-11-25T11:46:00.000Z",
"kind": "sign_change",
"planet": "rahu",
"sign": "capricorn",
"house_from_moon": 10,
"house_from_lagna": 6,
"natal_point": null,
"retrograde": true,
"summary": "Rahu enters Capricorn."
},
{
"at": "2027-01-24T20:01:00.000Z",
"kind": "sign_change",
"planet": "jupiter",
"sign": "cancer",
"house_from_moon": 4,
"house_from_lagna": 12,
"natal_point": null,
"retrograde": true,
"summary": "Jupiter enters Cancer."
},
{
"at": "2027-06-03T00:34:00.000Z",
"kind": "sign_change",
"planet": "saturn",
"sign": "aries",
"house_from_moon": 1,
"house_from_lagna": 9,
"natal_point": null,
"retrograde": false,
"summary": "Saturn enters Aries."
},
{
"at": "2027-06-25T23:46:00.000Z",
"kind": "sign_change",
"planet": "jupiter",
"sign": "leo",
"house_from_moon": 5,
"house_from_lagna": 1,
"natal_point": null,
"retrograde": false,
"summary": "Jupiter enters Leo."
},
{
"at": "2027-10-20T00:52:00.000Z",
"kind": "sign_change",
"planet": "saturn",
"sign": "pisces",
"house_from_moon": 12,
"house_from_lagna": 8,
"natal_point": null,
"retrograde": true,
"summary": "Saturn enters Pisces."
},
{
"at": "2027-11-26T13:08:00.000Z",
"kind": "sign_change",
"planet": "jupiter",
"sign": "virgo",
"house_from_moon": 6,
"house_from_lagna": 2,
"natal_point": null,
"retrograde": false,
"summary": "Jupiter enters Virgo."
}
],
"note": "Dated facts about the chart. They say what happens and when, not what it will bring."
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.10.10",
"mode": "live",
"credits_charged": 3,
"ayanamsa": "lahiri",
"house_system": "whole_sign",
"node": "true",
"timezone_used": {
"name": "Asia/Kolkata",
"utc_offset": "+05:30",
"source": "auto"
}
},
"warnings": []
}Try it
Sign changes and the minutes a transiting planet reaches or opposes a natal point
POST/v1/forecast/transits
2 credits · Secret key (test or live) · getForecastTransits · Page for this operation
Times are UTC, to the minute. At most 366 days, or 31 with the Moon.
Request body
birthBirth requireddatestring (date) requirede.g.
"1990-08-13"timestringpattern
^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$· e.g."06:30"time_accuracystringWith "unknown", lagna- and house-dependent fields are omitted and listed in warnings — never filled with a noon default.
one of
exact,approximate,unknown· default"exact"placeCoordinates or object or object requiredCoordinates, a place_id from /v1/places/search, or a free-text query. A vague query returns 422 place_ambiguous with candidates; the API never guesses.
One of:
- Coordinates
Fields
latitudenumber required≥ -90 · ≤ 90
longitudenumber required≥ -180 · ≤ 180
No other fields are accepted.
- object
Fields
place_idstring required
No other fields are accepted.
- object
Fields
querystring requiredat least 2 characters · at most 120 characters
No other fields are accepted.
- Coordinates
timezonestring"auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".
default
"auto"
No other fields are accepted.
fromstring (date) requirede.g.
"1990-08-13"tostring (date) requiredInclusive. At most 366 days from from, or 31 with the Moon.
e.g.
"1990-08-13"planetsarray of stringinclude_moonbooleandefault
falseoptionsobjectlangstring requiredone of
en,hi· default"en"
No other fields are accepted.
No other fields are accepted.
Response
JSON { data, meta, warnings }, where data is:
fromstring (date) requirede.g.
"1990-08-13"tostring (date) requirede.g.
"1990-08-13"framestring requiredat_startarray of object requiredplanetstring requiredsignstring requiredhouse_from_mooninteger requiredhouse_from_lagnainteger requiredlongitudenumber requiredretrogradeboolean required
countinteger requiredeventsarray of object requiredatstring (date-time) requiredkindstring requiredone of
mahadasha_start,antardasha_start,saturn_period_start,saturn_period_end,sign_change,conjunction,oppositionsummarystring requiredlordstringmahadashastringuntilstring (date-time)periodstringplanetstringsignstringhouse_from_moonintegerhouse_from_lagnaintegernatal_pointstring or nullOne of:
- string
- null
retrogradeboolean
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl -X POST 'https://api.astrologics.in/v1/forecast/transits' \
-H 'Authorization: Bearer al_test_YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"birth":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"from":"2026-11-01","to":"2026-11-30","planets":["mars","jupiter","saturn"]}'
Node.js
const res = await fetch("https://api.astrologics.in/v1/forecast/transits", {
method: "POST",
headers: { Authorization: "Bearer al_test_YOUR_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"birth": {
"date": "1990-08-13",
"time": "06:30",
"place": {
"latitude": 28.6139,
"longitude": 77.209
}
},
"from": "2026-11-01",
"to": "2026-11-30",
"planets": [
"mars",
"jupiter",
"saturn"
]
}),
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
body = {
"birth": {
"date": "1990-08-13",
"time": "06:30",
"place": {
"latitude": 28.6139,
"longitude": 77.209,
},
},
"from": "2026-11-01",
"to": "2026-11-30",
"planets": [
"mars",
"jupiter",
"saturn",
],
}
req = urllib.request.Request(
"https://api.astrologics.in/v1/forecast/transits",
method="POST",
headers={"Authorization": "Bearer al_test_YOUR_KEY", "Content-Type": "application/json"},
data=json.dumps(body).encode(),
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/forecast/transits');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"birth":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"from":"2026-11-01","to":"2026-11-30","planets":["mars","jupiter","saturn"]}',
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 2,033 characters
{
"data": {
"from": "2026-11-01",
"to": "2026-11-30",
"frame": "sidereal_lahiri",
"at_start": [
{
"planet": "mars",
"sign": "cancer",
"house_from_moon": 4,
"house_from_lagna": 12,
"longitude": 114.3874,
"retrograde": false
},
{
"planet": "jupiter",
"sign": "leo",
"house_from_moon": 5,
"house_from_lagna": 1,
"longitude": 120.0885,
"retrograde": false
},
{
"planet": "saturn",
"sign": "pisces",
"house_from_moon": 12,
"house_from_lagna": 8,
"longitude": 345.0493,
"retrograde": true
}
],
"count": 3,
"events": [
{
"at": "2026-11-04T21:00:00.000Z",
"kind": "conjunction",
"planet": "mars",
"sign": "cancer",
"house_from_moon": 4,
"house_from_lagna": 12,
"natal_point": "sun",
"retrograde": false,
"summary": "Mars reaches the natal Sun degree."
},
{
"at": "2026-11-12T14:50:00.000Z",
"kind": "sign_change",
"planet": "mars",
"sign": "leo",
"house_from_moon": 5,
"house_from_lagna": 1,
"natal_point": null,
"retrograde": false,
"summary": "Mars enters Leo."
},
{
"at": "2026-11-22T07:49:00.000Z",
"kind": "conjunction",
"planet": "mars",
"sign": "leo",
"house_from_moon": 5,
"house_from_lagna": 1,
"natal_point": "lagna",
"retrograde": false,
"summary": "Mars reaches the natal lagna degree."
}
]
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.10.10",
"mode": "live",
"credits_charged": 2,
"ayanamsa": "lahiri",
"house_system": "whole_sign",
"node": "true",
"timezone_used": {
"name": "Asia/Kolkata",
"utc_offset": "+05:30",
"source": "auto"
}
},
"warnings": []
}Try it
The larger dates in a range: dasha changes, Saturn's periods, and Saturn, Jupiter and Rahu returns
POST/v1/forecast/significant-dates
3 credits · Secret key (test or live) · getForecastSignificantDates · Page for this operation
At most 10 years. The major and notable weights are a labelled convention.
Request body
birthBirth requireddatestring (date) requirede.g.
"1990-08-13"timestringpattern
^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$· e.g."06:30"time_accuracystringWith "unknown", lagna- and house-dependent fields are omitted and listed in warnings — never filled with a noon default.
one of
exact,approximate,unknown· default"exact"placeCoordinates or object or object requiredCoordinates, a place_id from /v1/places/search, or a free-text query. A vague query returns 422 place_ambiguous with candidates; the API never guesses.
One of:
- Coordinates
Fields
latitudenumber required≥ -90 · ≤ 90
longitudenumber required≥ -180 · ≤ 180
No other fields are accepted.
- object
Fields
place_idstring required
No other fields are accepted.
- object
Fields
querystring requiredat least 2 characters · at most 120 characters
No other fields are accepted.
- Coordinates
timezonestring"auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".
default
"auto"
No other fields are accepted.
fromstring (date) requirede.g.
"1990-08-13"tostring (date) requiredInclusive. At most 10 years from from.
e.g.
"1990-08-13"minimumstringone of
notable,major· default"notable"optionsobjectlangstring requiredone of
en,hi· default"en"
No other fields are accepted.
No other fields are accepted.
Response
JSON { data, meta, warnings }, where data is:
fromstring (date) requirede.g.
"1990-08-13"tostring (date) requirede.g.
"1990-08-13"countinteger requireddatesarray of object requiredatstring (date-time) requiredkindstring requiredweightstring requiredone of
major,notablesummarystring requiredlordstringmahadashastringuntilstring (date-time)periodstring
basisstring requiredone of
conventionrulestring requirednotestring required
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl -X POST 'https://api.astrologics.in/v1/forecast/significant-dates' \
-H 'Authorization: Bearer al_test_YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"birth":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"from":"2026-01-01","to":"2030-12-31","minimum":"major"}'
Node.js
const res = await fetch("https://api.astrologics.in/v1/forecast/significant-dates", {
method: "POST",
headers: { Authorization: "Bearer al_test_YOUR_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"birth": {
"date": "1990-08-13",
"time": "06:30",
"place": {
"latitude": 28.6139,
"longitude": 77.209
}
},
"from": "2026-01-01",
"to": "2030-12-31",
"minimum": "major"
}),
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
body = {
"birth": {
"date": "1990-08-13",
"time": "06:30",
"place": {
"latitude": 28.6139,
"longitude": 77.209,
},
},
"from": "2026-01-01",
"to": "2030-12-31",
"minimum": "major",
}
req = urllib.request.Request(
"https://api.astrologics.in/v1/forecast/significant-dates",
method="POST",
headers={"Authorization": "Bearer al_test_YOUR_KEY", "Content-Type": "application/json"},
data=json.dumps(body).encode(),
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/forecast/significant-dates');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"birth":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"from":"2026-01-01","to":"2030-12-31","minimum":"major"}',
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 1,013 characters
{
"data": {
"from": "2026-01-01",
"to": "2030-12-31",
"count": 1,
"dates": [
{
"at": "2026-06-21T16:53:13.747Z",
"kind": "mahadasha_start",
"lord": "rahu",
"until": "2044-06-21T04:53:13.747Z",
"summary": "The Rahu mahadasha begins.",
"weight": "major"
}
],
"basis": "convention",
"rule": "major: a mahadasha begins, Sade Sati or Dhaiya begins or ends, or Saturn returns to its natal degree. notable: an antardasha begins, or Jupiter or Rahu returns.",
"note": "Dated facts about the chart. They say what happens and when, not what it will bring."
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.10.10",
"mode": "live",
"credits_charged": 3,
"ayanamsa": "lahiri",
"house_system": "whole_sign",
"node": "true",
"timezone_used": {
"name": "Asia/Kolkata",
"utc_offset": "+05:30",
"source": "auto"
}
},
"warnings": []
}Try it
One month for a chart: the running periods, where the planets stand and the month's dated events
POST/v1/forecast/digest
2 credits · Secret key (test or live) · getForecastDigest · Page for this operation
Each event has a one-line summary in English or Hindi.
Request body
birthBirth requireddatestring (date) requirede.g.
"1990-08-13"timestringpattern
^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$· e.g."06:30"time_accuracystringWith "unknown", lagna- and house-dependent fields are omitted and listed in warnings — never filled with a noon default.
one of
exact,approximate,unknown· default"exact"placeCoordinates or object or object requiredCoordinates, a place_id from /v1/places/search, or a free-text query. A vague query returns 422 place_ambiguous with candidates; the API never guesses.
One of:
- Coordinates
Fields
latitudenumber required≥ -90 · ≤ 90
longitudenumber required≥ -180 · ≤ 180
No other fields are accepted.
- object
Fields
place_idstring required
No other fields are accepted.
- object
Fields
querystring requiredat least 2 characters · at most 120 characters
No other fields are accepted.
- Coordinates
timezonestring"auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".
default
"auto"
No other fields are accepted.
monthstring requiredThe month as YYYY-MM, in UTC.
pattern
^[0-9]{4}-(0[1-9]|1[0-2])$optionsobjectlangstring requiredone of
en,hi· default"en"
No other fields are accepted.
No other fields are accepted.
Response
JSON { data, meta, warnings }, where data is:
monthstring requiredrunningobject requiredmahadashaobject or null requiredOne of:
- object
Fields
lordstring requireduntilstring (date-time) required
- null
- object
antardashaobject or null requiredOne of:
- object
Fields
lordstring requireduntilstring (date-time) required
- null
- object
saturn_periodobject or null requiredOne of:
- object
Fields
periodstring requireduntilstring (date-time) required
- null
- object
planets_at_startarray of object requiredplanetstring requiredsignstring requiredhouse_from_mooninteger requiredhouse_from_lagnainteger requiredlongitudenumber requiredretrogradeboolean required
countinteger requiredeventsarray of object requiredatstring (date-time) requiredkindstring requiredone of
mahadasha_start,antardasha_start,saturn_period_start,saturn_period_end,sign_change,conjunction,oppositionsummarystring requiredlordstringmahadashastringuntilstring (date-time)periodstringplanetstringsignstringhouse_from_moonintegerhouse_from_lagnaintegernatal_pointstring or nullOne of:
- string
- null
retrogradeboolean
notestring required
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl -X POST 'https://api.astrologics.in/v1/forecast/digest' \
-H 'Authorization: Bearer al_test_YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"birth":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"month":"2026-11"}'
Node.js
const res = await fetch("https://api.astrologics.in/v1/forecast/digest", {
method: "POST",
headers: { Authorization: "Bearer al_test_YOUR_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"birth": {
"date": "1990-08-13",
"time": "06:30",
"place": {
"latitude": 28.6139,
"longitude": 77.209
}
},
"month": "2026-11"
}),
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
body = {
"birth": {
"date": "1990-08-13",
"time": "06:30",
"place": {
"latitude": 28.6139,
"longitude": 77.209,
},
},
"month": "2026-11",
}
req = urllib.request.Request(
"https://api.astrologics.in/v1/forecast/digest",
method="POST",
headers={"Authorization": "Bearer al_test_YOUR_KEY", "Content-Type": "application/json"},
data=json.dumps(body).encode(),
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/forecast/digest');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"birth":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"month":"2026-11"}',
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 4,866 characters
{
"data": {
"month": "2026-11",
"running": {
"mahadasha": {
"lord": "rahu",
"until": "2044-06-21T04:53:13.747Z"
},
"antardasha": {
"lord": "rahu",
"until": "2029-03-03T21:05:13.747Z"
},
"saturn_period": {
"period": "sade_sati",
"until": "2032-05-30T21:29:10.451Z"
}
},
"planets_at_start": [
{
"planet": "sun",
"sign": "libra",
"house_from_moon": 7,
"house_from_lagna": 3,
"longitude": 194.3425,
"retrograde": false
},
{
"planet": "mercury",
"sign": "libra",
"house_from_moon": 7,
"house_from_lagna": 3,
"longitude": 202.4284,
"retrograde": true
},
{
"planet": "venus",
"sign": "libra",
"house_from_moon": 7,
"house_from_lagna": 3,
"longitude": 182.0083,
"retrograde": true
},
{
"planet": "mars",
"sign": "cancer",
"house_from_moon": 4,
"house_from_lagna": 12,
"longitude": 114.3874,
"retrograde": false
},
{
"planet": "jupiter",
"sign": "leo",
"house_from_moon": 5,
"house_from_lagna": 1,
"longitude": 120.0885,
"retrograde": false
},
{
"planet": "saturn",
"sign": "pisces",
"house_from_moon": 12,
"house_from_lagna": 8,
"longitude": 345.0493,
"retrograde": true
},
{
"planet": "rahu",
"sign": "aquarius",
"house_from_moon": 11,
"house_from_lagna": 7,
"longitude": 302.702,
"retrograde": true
},
{
"planet": "ketu",
"sign": "leo",
"house_from_moon": 5,
"house_from_lagna": 1,
"longitude": 122.702,
"retrograde": true
}
],
"count": 8,
"events": [
{
"at": "2026-11-04T21:00:00.000Z",
"kind": "conjunction",
"planet": "mars",
"sign": "cancer",
"house_from_moon": 4,
"house_from_lagna": 12,
"natal_point": "sun",
"retrograde": false,
"summary": "Mars reaches the natal Sun degree."
},
{
"at": "2026-11-05T19:18:00.000Z",
"kind": "sign_change",
"planet": "venus",
"sign": "virgo",
"house_from_moon": 6,
"house_from_lagna": 2,
"natal_point": null,
"retrograde": true,
"summary": "Venus enters Virgo."
},
{
"at": "2026-11-12T14:50:00.000Z",
"kind": "sign_change",
"planet": "mars",
"sign": "leo",
"house_from_moon": 5,
"house_from_lagna": 1,
"natal_point": null,
"retrograde": false,
"summary": "Mars enters Leo."
},
{
"at": "2026-11-16T14:15:00.000Z",
"kind": "sign_change",
"planet": "sun",
"sign": "scorpio",
"house_from_moon": 8,
"house_from_lagna": 4,
"natal_point": null,
"retrograde": false,
"summary": "Sun enters Scorpio."
},
{
"at": "2026-11-22T07:49:00.000Z",
"kind": "conjunction",
"planet": "mars",
"sign": "leo",
"house_from_moon": 5,
"house_from_lagna": 1,
"natal_point": "lagna",
"retrograde": false,
"summary": "Mars reaches the natal lagna degree."
},
{
"at": "2026-11-22T12:00:00.000Z",
"kind": "sign_change",
"planet": "venus",
"sign": "libra",
"house_from_moon": 7,
"house_from_lagna": 3,
"natal_point": null,
"retrograde": false,
"summary": "Venus enters Libra."
},
{
"at": "2026-11-25T11:46:00.000Z",
"kind": "sign_change",
"planet": "rahu",
"sign": "capricorn",
"house_from_moon": 10,
"house_from_lagna": 6,
"natal_point": null,
"retrograde": true,
"summary": "Rahu enters Capricorn."
},
{
"at": "2026-11-25T11:46:00.000Z",
"kind": "sign_change",
"planet": "ketu",
"sign": "cancer",
"house_from_moon": 4,
"house_from_lagna": 12,
"natal_point": null,
"retrograde": true,
"summary": "Ketu enters Cancer."
}
],
"note": "Dated facts about the chart. They say what happens and when, not what it will bring."
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.10.10",
"mode": "live",
"credits_charged": 2,
"ayanamsa": "lahiri",
"house_system": "whole_sign",
"node": "true",
"timezone_used": {
"name": "Asia/Kolkata",
"utc_offset": "+05:30",
"source": "auto"
}
},
"warnings": []
}Try it
The minute the Sun returns to its birth longitude in a year, with the chart for that minute
POST/v1/forecast/solar-return
2 credits · Secret key (test or live) · getSolarReturn · Page for this operation
Sidereal by default, or tropical for the moment only. The chart is always sidereal on the Lahiri ayanamsa. Give place to cast it somewhere other than the birth place.
Request body
birthBirth requireddatestring (date) requirede.g.
"1990-08-13"timestringpattern
^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$· e.g."06:30"time_accuracystringWith "unknown", lagna- and house-dependent fields are omitted and listed in warnings — never filled with a noon default.
one of
exact,approximate,unknown· default"exact"placeCoordinates or object or object requiredCoordinates, a place_id from /v1/places/search, or a free-text query. A vague query returns 422 place_ambiguous with candidates; the API never guesses.
One of:
- Coordinates
Fields
latitudenumber required≥ -90 · ≤ 90
longitudenumber required≥ -180 · ≤ 180
No other fields are accepted.
- object
Fields
place_idstring required
No other fields are accepted.
- object
Fields
querystring requiredat least 2 characters · at most 120 characters
No other fields are accepted.
- Coordinates
timezonestring"auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".
default
"auto"
No other fields are accepted.
yearinteger required≥ 1901 · ≤ 2100
framestringone of
sidereal,tropical· default"sidereal"placeCoordinates or object or objectCoordinates, a place_id from /v1/places/search, or a free-text query. A vague query returns 422 place_ambiguous with candidates; the API never guesses.
One of:
- Coordinates
Fields
latitudenumber required≥ -90 · ≤ 90
longitudenumber required≥ -180 · ≤ 180
No other fields are accepted.
- object
Fields
place_idstring required
No other fields are accepted.
- object
Fields
querystring requiredat least 2 characters · at most 120 characters
No other fields are accepted.
- Coordinates
No other fields are accepted.
Response
JSON { data, meta, warnings }, where data is:
yearinteger requiredframestring requiredone of
sidereal,tropicalnatal_sun_longitudenumber requiredmomentstring (date-time) requiredplaceobject requiredlatitudenumber requiredlongitudenumber required
lagnaobject requiredsignstring requireddegreenumber required
planetsarray of object requiredplanetstring requiredlongitudenumber requiredsignstring requiredhouseinteger requiredretrogradeboolean required
chart_framestring required
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl -X POST 'https://api.astrologics.in/v1/forecast/solar-return' \
-H 'Authorization: Bearer al_test_YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"birth":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"year":2026}'
Node.js
const res = await fetch("https://api.astrologics.in/v1/forecast/solar-return", {
method: "POST",
headers: { Authorization: "Bearer al_test_YOUR_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"birth": {
"date": "1990-08-13",
"time": "06:30",
"place": {
"latitude": 28.6139,
"longitude": 77.209
}
},
"year": 2026
}),
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
body = {
"birth": {
"date": "1990-08-13",
"time": "06:30",
"place": {
"latitude": 28.6139,
"longitude": 77.209,
},
},
"year": 2026,
}
req = urllib.request.Request(
"https://api.astrologics.in/v1/forecast/solar-return",
method="POST",
headers={"Authorization": "Bearer al_test_YOUR_KEY", "Content-Type": "application/json"},
data=json.dumps(body).encode(),
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/forecast/solar-return');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"birth":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"year":2026}',
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 2,046 characters
{
"data": {
"year": 2026,
"frame": "sidereal",
"natal_sun_longitude": 116.3139,
"moment": "2026-08-13T06:27:00.000Z",
"place": {
"latitude": 28.6139,
"longitude": 77.209
},
"lagna": {
"sign": "libra",
"degree": 15.59
},
"planets": [
{
"planet": "sun",
"longitude": 116.3147,
"sign": "cancer",
"house": 10,
"retrograde": false
},
{
"planet": "moon",
"longitude": 123.4816,
"sign": "leo",
"house": 11,
"retrograde": false
},
{
"planet": "mercury",
"longitude": 101.8333,
"sign": "cancer",
"house": 10,
"retrograde": false
},
{
"planet": "venus",
"longitude": 162.1804,
"sign": "virgo",
"house": 12,
"retrograde": false
},
{
"planet": "mars",
"longitude": 67.0347,
"sign": "gemini",
"house": 9,
"retrograde": false
},
{
"planet": "jupiter",
"longitude": 105.436,
"sign": "cancer",
"house": 10,
"retrograde": false
},
{
"planet": "saturn",
"longitude": 350.2584,
"sign": "pisces",
"house": 6,
"retrograde": true
},
{
"planet": "rahu",
"longitude": 305.5552,
"sign": "aquarius",
"house": 5,
"retrograde": true
},
{
"planet": "ketu",
"longitude": 125.5552,
"sign": "leo",
"house": 11,
"retrograde": true
}
],
"chart_frame": "sidereal_lahiri"
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.10.10",
"mode": "live",
"credits_charged": 2,
"ayanamsa": "lahiri",
"house_system": "whole_sign",
"node": "true",
"timezone_used": {
"name": "Asia/Kolkata",
"utc_offset": "+05:30",
"source": "auto"
}
},
"warnings": []
}