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

  • birth Birth required
    • date string (date) required

      e.g. "1990-08-13"

    • time string

      pattern ^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$ · e.g. "06:30"

    • time_accuracy string

      With "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"

    • place Coordinates or object or object required

      Coordinates, 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:

      1. Coordinates
        Fields
        • latitude number required

          ≥ -90 · ≤ 90

        • longitude number required

          ≥ -180 · ≤ 180

        No other fields are accepted.

      2. object
        Fields
        • place_id string required

        No other fields are accepted.

      3. object
        Fields
        • query string required

          at least 2 characters · at most 120 characters

        No other fields are accepted.

    • timezone string

      "auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".

      default "auto"

    No other fields are accepted.

  • from string (date) required

    e.g. "1990-08-13"

  • to string (date) required

    Inclusive. At most 5 years from from.

    e.g. "1990-08-13"

  • options object
    • lang string required

      one of en, hi · default "en"

    No other fields are accepted.

No other fields are accepted.

Response

JSON { data, meta, warnings }, where data is:

  • from string (date) required

    e.g. "1990-08-13"

  • to string (date) required

    e.g. "1990-08-13"

  • running_at_start object required
    • mahadasha object or null required

      One of:

      1. object
        Fields
        • lord string required
        • until string (date-time) required
      2. null
    • antardasha object or null required

      One of:

      1. object
        Fields
        • lord string required
        • until string (date-time) required
      2. null
    • saturn_period object or null required

      One of:

      1. object
        Fields
        • period string required
        • until string (date-time) required
      2. null
  • count integer required
  • events array of object required
    • at string (date-time) required
    • kind string required

      one of mahadasha_start, antardasha_start, saturn_period_start, saturn_period_end, sign_change, conjunction, opposition

    • summary string required
    • lord string
    • mahadasha string
    • until string (date-time)
    • period string
    • planet string
    • sign string
    • house_from_moon integer
    • house_from_lagna integer
    • natal_point string or null

      One of:

      1. string
      2. null
    • retrograde boolean
  • note string 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

Leave empty to use the shared demo key (limited). Test keys only: never charged. Kept in this browser tab and sent through this site to the API. Create one

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

  • birth Birth required
    • date string (date) required

      e.g. "1990-08-13"

    • time string

      pattern ^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$ · e.g. "06:30"

    • time_accuracy string

      With "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"

    • place Coordinates or object or object required

      Coordinates, 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:

      1. Coordinates
        Fields
        • latitude number required

          ≥ -90 · ≤ 90

        • longitude number required

          ≥ -180 · ≤ 180

        No other fields are accepted.

      2. object
        Fields
        • place_id string required

        No other fields are accepted.

      3. object
        Fields
        • query string required

          at least 2 characters · at most 120 characters

        No other fields are accepted.

    • timezone string

      "auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".

      default "auto"

    No other fields are accepted.

  • from string (date) required

    e.g. "1990-08-13"

  • to string (date) required

    Inclusive. At most 366 days from from, or 31 with the Moon.

    e.g. "1990-08-13"

  • planets array of string
  • include_moon boolean

    default false

  • options object
    • lang string required

      one of en, hi · default "en"

    No other fields are accepted.

No other fields are accepted.

Response

JSON { data, meta, warnings }, where data is:

  • from string (date) required

    e.g. "1990-08-13"

  • to string (date) required

    e.g. "1990-08-13"

  • frame string required
  • at_start array of object required
    • planet string required
    • sign string required
    • house_from_moon integer required
    • house_from_lagna integer required
    • longitude number required
    • retrograde boolean required
  • count integer required
  • events array of object required
    • at string (date-time) required
    • kind string required

      one of mahadasha_start, antardasha_start, saturn_period_start, saturn_period_end, sign_change, conjunction, opposition

    • summary string required
    • lord string
    • mahadasha string
    • until string (date-time)
    • period string
    • planet string
    • sign string
    • house_from_moon integer
    • house_from_lagna integer
    • natal_point string or null

      One of:

      1. string
      2. null
    • retrograde boolean

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

Leave empty to use the shared demo key (limited). Test keys only: never charged. Kept in this browser tab and sent through this site to the API. Create one

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

  • birth Birth required
    • date string (date) required

      e.g. "1990-08-13"

    • time string

      pattern ^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$ · e.g. "06:30"

    • time_accuracy string

      With "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"

    • place Coordinates or object or object required

      Coordinates, 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:

      1. Coordinates
        Fields
        • latitude number required

          ≥ -90 · ≤ 90

        • longitude number required

          ≥ -180 · ≤ 180

        No other fields are accepted.

      2. object
        Fields
        • place_id string required

        No other fields are accepted.

      3. object
        Fields
        • query string required

          at least 2 characters · at most 120 characters

        No other fields are accepted.

    • timezone string

      "auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".

      default "auto"

    No other fields are accepted.

  • from string (date) required

    e.g. "1990-08-13"

  • to string (date) required

    Inclusive. At most 10 years from from.

    e.g. "1990-08-13"

  • minimum string

    one of notable, major · default "notable"

  • options object
    • lang string required

      one of en, hi · default "en"

    No other fields are accepted.

No other fields are accepted.

Response

JSON { data, meta, warnings }, where data is:

  • from string (date) required

    e.g. "1990-08-13"

  • to string (date) required

    e.g. "1990-08-13"

  • count integer required
  • dates array of object required
    • at string (date-time) required
    • kind string required
    • weight string required

      one of major, notable

    • summary string required
    • lord string
    • mahadasha string
    • until string (date-time)
    • period string
  • basis string required

    one of convention

  • rule string required
  • note string 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

Leave empty to use the shared demo key (limited). Test keys only: never charged. Kept in this browser tab and sent through this site to the API. Create one

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

  • birth Birth required
    • date string (date) required

      e.g. "1990-08-13"

    • time string

      pattern ^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$ · e.g. "06:30"

    • time_accuracy string

      With "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"

    • place Coordinates or object or object required

      Coordinates, 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:

      1. Coordinates
        Fields
        • latitude number required

          ≥ -90 · ≤ 90

        • longitude number required

          ≥ -180 · ≤ 180

        No other fields are accepted.

      2. object
        Fields
        • place_id string required

        No other fields are accepted.

      3. object
        Fields
        • query string required

          at least 2 characters · at most 120 characters

        No other fields are accepted.

    • timezone string

      "auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".

      default "auto"

    No other fields are accepted.

  • month string required

    The month as YYYY-MM, in UTC.

    pattern ^[0-9]{4}-(0[1-9]|1[0-2])$

  • options object
    • lang string required

      one of en, hi · default "en"

    No other fields are accepted.

No other fields are accepted.

Response

JSON { data, meta, warnings }, where data is:

  • month string required
  • running object required
    • mahadasha object or null required

      One of:

      1. object
        Fields
        • lord string required
        • until string (date-time) required
      2. null
    • antardasha object or null required

      One of:

      1. object
        Fields
        • lord string required
        • until string (date-time) required
      2. null
    • saturn_period object or null required

      One of:

      1. object
        Fields
        • period string required
        • until string (date-time) required
      2. null
  • planets_at_start array of object required
    • planet string required
    • sign string required
    • house_from_moon integer required
    • house_from_lagna integer required
    • longitude number required
    • retrograde boolean required
  • count integer required
  • events array of object required
    • at string (date-time) required
    • kind string required

      one of mahadasha_start, antardasha_start, saturn_period_start, saturn_period_end, sign_change, conjunction, opposition

    • summary string required
    • lord string
    • mahadasha string
    • until string (date-time)
    • period string
    • planet string
    • sign string
    • house_from_moon integer
    • house_from_lagna integer
    • natal_point string or null

      One of:

      1. string
      2. null
    • retrograde boolean
  • note string 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

Leave empty to use the shared demo key (limited). Test keys only: never charged. Kept in this browser tab and sent through this site to the API. Create one

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

  • birth Birth required
    • date string (date) required

      e.g. "1990-08-13"

    • time string

      pattern ^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$ · e.g. "06:30"

    • time_accuracy string

      With "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"

    • place Coordinates or object or object required

      Coordinates, 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:

      1. Coordinates
        Fields
        • latitude number required

          ≥ -90 · ≤ 90

        • longitude number required

          ≥ -180 · ≤ 180

        No other fields are accepted.

      2. object
        Fields
        • place_id string required

        No other fields are accepted.

      3. object
        Fields
        • query string required

          at least 2 characters · at most 120 characters

        No other fields are accepted.

    • timezone string

      "auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".

      default "auto"

    No other fields are accepted.

  • year integer required

    ≥ 1901 · ≤ 2100

  • frame string

    one of sidereal, tropical · default "sidereal"

  • place Coordinates or object or object

    Coordinates, 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:

    1. Coordinates
      Fields
      • latitude number required

        ≥ -90 · ≤ 90

      • longitude number required

        ≥ -180 · ≤ 180

      No other fields are accepted.

    2. object
      Fields
      • place_id string required

      No other fields are accepted.

    3. object
      Fields
      • query string required

        at least 2 characters · at most 120 characters

      No other fields are accepted.

No other fields are accepted.

Response

JSON { data, meta, warnings }, where data is:

  • year integer required
  • frame string required

    one of sidereal, tropical

  • natal_sun_longitude number required
  • moment string (date-time) required
  • place object required
    • latitude number required
    • longitude number required
  • lagna object required
    • sign string required
    • degree number required
  • planets array of object required
    • planet string required
    • longitude number required
    • sign string required
    • house integer required
    • retrograde boolean required
  • chart_frame string 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": []
}
Try it

Leave empty to use the shared demo key (limited). Test keys only: never charged. Kept in this browser tab and sent through this site to the API. Create one