API Reference
Forecast
Astrology forecast API that merges upcoming transit aspects, sign ingresses, retrograde stations, new and full moons, biorhythm critical days, and Vimshottari dasha changes into one time-ordered forecast for a single subject.
Cross-domain forecast timeline
https://roxyapi.com/api/v2/forecast/timelineBuild one time-ordered forecast for a single birth subject by merging upcoming events across three domains: western transit-to-natal aspects, sign ingresses, retrograde stations, eclipses, and new and full moons; biorhythm critical days; and vedic Vimshottari mahadasha, antardasha, and pratyantardasha boundaries. The window is clamped to 90 days and events are capped and scored by significance. Built for what-is-coming dashboards, daily and weekly forecast feeds, and timing tools.
Call it
import { createRoxy } from '@roxyapi/sdk'
const roxy = createRoxy(process.env.ROXY_API_KEY!)
const { data } = await roxy.forecast.generateTimeline({ body: { birthData: { date: '1990-07-15', time: '13:30:00', timezone: 'America/New_York', latitude: 0, longitude: 0 } } })Install: npm install @roxyapi/sdk
from roxy_sdk import create_roxy
roxy = create_roxy("YOUR_API_KEY")
result = roxy.forecast.generate_timeline(birth_data={'date': '1990-07-15', 'time': '13:30:00', 'timezone': 'America/New_York', 'latitude': 0, 'longitude': 0})Install: pip install roxy-sdk
use function RoxyAPI\Sdk\createRoxy;
$roxy = createRoxy(getenv('ROXY_API_KEY'));
$result = $roxy->forecast->generateTimeline(birthData: ['date' => '1990-07-15', 'time' => '13:30:00', 'timezone' => 'America/New_York', 'latitude' => 0, 'longitude' => 0]);Install: composer require roxyapi/sdk
using RoxyApi;
var roxy = new RoxyClient(Environment.GetEnvironmentVariable("ROXY_API_KEY")!);
var result = await roxy.Forecast.Timeline.PostAsync(new() { /* request fields above */ });Install: dotnet add package RoxyApi.Sdk
import roxyapi "github.com/RoxyAPI/sdk-go"
roxy, _ := roxyapi.NewRoxy(os.Getenv("ROXY_API_KEY"))
resp, _ := roxy.Forecast.GenerateTimeline(ctx, nil, roxyapi.GenerateTimelineJSONRequestBody{ /* request fields above */ })Install: go get github.com/RoxyAPI/sdk-go
use roxyapi::{Roxy, types};
async fn call(roxy: &Roxy, params: &types::GenerateTimelineParams, body: &types::GenerateTimelineRequest) -> Result<(), roxyapi::Error> {
let result = roxy.forecast().generate_timeline(params, body).await?;
println!("{result:?}");
Ok(())
}Install: cargo add roxyapi
curl -X POST "https://roxyapi.com/api/v2/forecast/timeline" \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"birthData":{"date":"1990-07-15","time":"13:30:00","timezone":"America/New_York","latitude":0,"longitude":0}}'Typed SDKs in 6 languages. On Remote MCP this is the tool post_forecast_timeline on the Forecast server, https://roxyapi.com/mcp/forecast.
Parameters
Request body
| Field | Type | Description |
|---|---|---|
birthDatarequired | object | The single birth subject this forecast is built for. One object only, never an array. |
birthData.daterequired | string (date) | Birth date in YYYY-MM-DD format. Anchors the natal chart and the Vimshottari dasha sequence. |
birthData.timerequired | string (time) | Birth time in 24-hour HH:MM:SS format. Precision matters for the natal positions the transit aspects are measured against. |
birthData.timezonerequired | number or string | IANA name (e.g. "America/New_York", "Europe/London", "UTC"), decimal hours (e.g. -5 for EST, 1 for CET), or a fixed UTC offset (e.g. "-05:00", "+01:00"). Prefer the IANA name: it is resolved to the offset in force at the birth date and time, historical daylight-saving rules included, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state at that moment. On a transition day a time in the repeated hour is read as its first occurrence and a time in the skipped hour is moved forward past the gap. Invalid timezones return 400 with a validation error. |
birthData.latitudeoptional | number | Birth latitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. |
birthData.longitudeoptional | number | Birth longitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. |
startDateoptional | string (date) | First day of the forecast window in YYYY-MM-DD format. Defaults to today in UTC. |
endDateoptional | string (date) | Last day of the forecast window in YYYY-MM-DD format. Defaults to startDate plus 30 days. The window is clamped to a maximum of 90 days from startDate. |
domainsoptional | array of string enum | Which forecast domains to include. Defaults to all three. Pass a subset to scope the timeline to one or two engines. |
minSignificanceoptional | number | Drop events scoring below this significance threshold from 0 to 100. Defaults to 0, keeping all events. |
domainWeightsoptional | object | Per-domain significance multipliers applied before the significance floor and event cap. Bias which domains survive filtering and the cap. Omitted domains default to a weight of 1. Valid keys are western, vedic, and biorhythm. |
domainWeights.westernoptional | number | Multiplier for this domain significance. 1 leaves it unchanged, above 1 promotes the domain, below 1 demotes it. |
domainWeights.vedicoptional | number | Multiplier for this domain significance. 1 leaves it unchanged, above 1 promotes the domain, below 1 demotes it. |
domainWeights.biorhythmoptional | number | Multiplier for this domain significance. 1 leaves it unchanged, above 1 promotes the domain, below 1 demotes it. |
Response fields
| Field | Type | Description |
|---|---|---|
birthDatarequired | object | Echo of the birth subject this forecast was built for. |
birthData.daterequired | string (date) | Birth date in YYYY-MM-DD format. Anchors the natal chart and the Vimshottari dasha sequence. |
birthData.timerequired | string (time) | Birth time in 24-hour HH:MM:SS format. Precision matters for the natal positions the transit aspects are measured against. |
birthData.timezonerequired | number | Decimal UTC offset the forecast was computed with, resolved from whatever the request sent. An IANA name is resolved to the offset in force at the birth date and time, so this is the literal number applied, never the name. |
birthData.latitudeoptional | number | Birth latitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. |
birthData.longitudeoptional | number | Birth longitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. |
startDaterequired | string | First day of the resolved forecast window. |
endDaterequired | string | Last day of the resolved forecast window after the horizon clamp. |
countrequired | number | Number of events in the timeline after deduplication, filtering, and the event cap. |
eventsrequired | array of object | The merged, time-ordered forecast events across the requested domains. |
events[].daterequired | string | Calendar date of the event in YYYY-MM-DD (UTC). |
events[].datetimerequired | string | Exact instant of the event as an ISO-8601 UTC datetime, to the nearest second. Astronomical events are refined to this instant by search, not reported at a daily sample point; a dasha-change is the period boundary itself, counted from the birth instant. |
events[].domainrequired | string enum | Forecast domain. western covers transit aspects, sign ingresses, retrograde stations, eclipses, and new and full moons. vedic covers Vimshottari mahadasha, antardasha, and pratyantardasha boundaries. biorhythm covers critical days. A stable machine value, never localized, so consumers can branch on it under any language. |
events[].typerequired | string enum | Event kind. transit-aspect, sign-ingress, retrograde-station, eclipse, and lunar-phase are western, dasha-change is vedic Vimshottari, critical-day is biorhythm. A stable machine value, never localized, so consumers can branch on it under any language. |
Show all fieldsShow fewer fields
| Field | Type | Description |
|---|---|---|
events[].bodyrequired | string | Primary subject of the event. A transiting planet for western events, Sun for a solar eclipse, Moon for a lunar eclipse or a new or full moon, or the critical cycle for biorhythm days. For a dasha-change, the Vimshottari lords outermost first, joined by a hyphen, then one space and the level: Saturn Mahadasha, Saturn-Mercury Antardasha, Saturn-Mercury-Ketu Pratyantardasha. Lords are always one of Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury. Never localized. |
events[].targetoptional | string | For a transit-aspect, the natal body the transit aspects. For a sign-ingress, the zodiac sign entered, and for a lunar-phase, the zodiac sign of the New or Full Moon. Absent for other event types. |
events[].aspectoptional | string | For a transit-aspect, the angular relationship. One of conjunction, sextile, square, trine, opposition. Absent for other event types. |
events[].orboptional | number | For a transit-aspect, the separation in degrees from the exact aspect at the reported instant, rounded to three decimals. The instant is the moment the aspect perfects, so this reads 0. Absent for other event types. |
events[].stationoptional | string enum | For a retrograde-station, whether the planet turns retrograde or direct. A stable machine value, never localized. Absent for other event types. |
events[].kindoptional | string enum | For an eclipse, its classification. total and penumbral apply to lunar eclipses, partial applies to both, annular and total apply to solar eclipses. A stable machine value, never localized. Absent for other event types. |
events[].obscurationoptional | number | For a lunar eclipse, the peak fraction from 0 to 1 of the Moon disc covered by Earth umbra. 1 for a total lunar eclipse, between 0 and 1 for a partial, 0 for a penumbral. Absent for solar eclipses and other event types. |
events[].phaseoptional | string enum | For a lunar-phase event, which syzygy it is: new-moon (Sun-Moon conjunction) or full-moon (Sun-Moon opposition). The intermediate quarters are not emitted. A stable machine value, never localized. Absent for other event types. |
events[].descriptionrequired | string | Plain-language summary of the event, suitable for direct display. The only localized field: when lang is set this sentence, and the body, target, and aspect names within it, render in the requested language while the structured fields stay English. |
events[].significancerequired | number | Importance score from 0 to 100. Outer-planet exact transit aspects and mahadasha changes score highest; fast Moon events and biorhythm critical days score lower. When domainWeights is supplied this is the weighted score, rounded and clamped to 0 to 100, which is the same value the significance floor and the event cap acted on. |
Example response
{
"birthData": {
"date": "1990-07-15",
"time": "13:30:00",
"timezone": -4,
"latitude": 0,
"longitude": 0
},
"startDate": "2026-06-01",
"endDate": "2026-08-30",
"count": 42,
"events": [
{
"date": "2026-07-04",
"datetime": "2026-07-04T08:42:11Z",
"domain": "western",
"type": "transit-aspect",
"body": "Saturn",
"target": "Moon",
"aspect": "square",
"orb": 0,
"station": "retrograde",
"kind": "total",
"obscuration": 0.966,
"phase": "full-moon",
"description": "Transiting Saturn square natal Moon, an exact aspect.",
"significance": 90
}
]
}Western astrology forecast
https://roxyapi.com/api/v2/forecast/transitsForecast the western astrology events for a single birth chart over a window up to 90 days: every transit-to-natal major aspect refined to its exact instant, every transiting planet sign ingress, every retrograde or direct station, every solar and lunar eclipse, and every New and Full Moon. Returns a time-ordered, significance-scored timeline. Built for astrology forecast feeds, transit alerts, and timing tools.
Call it
import { createRoxy } from '@roxyapi/sdk'
const roxy = createRoxy(process.env.ROXY_API_KEY!)
const { data } = await roxy.forecast.forecastTransits({ body: { birthData: { date: '1990-07-15', time: '13:30:00', timezone: 'America/New_York', latitude: 0, longitude: 0 } } })Install: npm install @roxyapi/sdk
from roxy_sdk import create_roxy
roxy = create_roxy("YOUR_API_KEY")
result = roxy.forecast.forecast_transits(birth_data={'date': '1990-07-15', 'time': '13:30:00', 'timezone': 'America/New_York', 'latitude': 0, 'longitude': 0})Install: pip install roxy-sdk
use function RoxyAPI\Sdk\createRoxy;
$roxy = createRoxy(getenv('ROXY_API_KEY'));
$result = $roxy->forecast->forecastTransits(birthData: ['date' => '1990-07-15', 'time' => '13:30:00', 'timezone' => 'America/New_York', 'latitude' => 0, 'longitude' => 0]);Install: composer require roxyapi/sdk
using RoxyApi;
var roxy = new RoxyClient(Environment.GetEnvironmentVariable("ROXY_API_KEY")!);
var result = await roxy.Forecast.Transits.PostAsync(new() { /* request fields above */ });Install: dotnet add package RoxyApi.Sdk
import roxyapi "github.com/RoxyAPI/sdk-go"
roxy, _ := roxyapi.NewRoxy(os.Getenv("ROXY_API_KEY"))
resp, _ := roxy.Forecast.ForecastTransits(ctx, nil, roxyapi.ForecastTransitsJSONRequestBody{ /* request fields above */ })Install: go get github.com/RoxyAPI/sdk-go
use roxyapi::{Roxy, types};
async fn call(roxy: &Roxy, params: &types::ForecastTransitsParams, body: &types::ForecastTransitsRequest) -> Result<(), roxyapi::Error> {
let result = roxy.forecast().forecast_transits(params, body).await?;
println!("{result:?}");
Ok(())
}Install: cargo add roxyapi
curl -X POST "https://roxyapi.com/api/v2/forecast/transits" \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"birthData":{"date":"1990-07-15","time":"13:30:00","timezone":"America/New_York","latitude":0,"longitude":0}}'Typed SDKs in 6 languages. On Remote MCP this is the tool post_forecast_transits on the Forecast server, https://roxyapi.com/mcp/forecast.
Parameters
| Parameter | Type | Description |
|---|---|---|
langquery, optional | string enum | Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English. Default en. |
Request body
| Field | Type | Description |
|---|---|---|
birthDatarequired | object | The single birth subject this transit forecast is built for. One object only, never an array. |
birthData.daterequired | string (date) | Birth date in YYYY-MM-DD format. Anchors the natal chart and the Vimshottari dasha sequence. |
birthData.timerequired | string (time) | Birth time in 24-hour HH:MM:SS format. Precision matters for the natal positions the transit aspects are measured against. |
birthData.timezonerequired | number or string | IANA name (e.g. "America/New_York", "Europe/London", "UTC"), decimal hours (e.g. -5 for EST, 1 for CET), or a fixed UTC offset (e.g. "-05:00", "+01:00"). Prefer the IANA name: it is resolved to the offset in force at the birth date and time, historical daylight-saving rules included, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state at that moment. On a transition day a time in the repeated hour is read as its first occurrence and a time in the skipped hour is moved forward past the gap. Invalid timezones return 400 with a validation error. |
birthData.latitudeoptional | number | Birth latitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. |
birthData.longitudeoptional | number | Birth longitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. |
startDateoptional | string (date) | First day of the transit window in YYYY-MM-DD format. Defaults to today in UTC. |
endDateoptional | string (date) | Last day of the transit window in YYYY-MM-DD format. Defaults to startDate plus 30 days. Clamped to a maximum of 90 days from startDate. |
minSignificanceoptional | number | Drop transit events scoring below this significance threshold from 0 to 100. Defaults to 0. |
Response fields
| Field | Type | Description |
|---|---|---|
birthDatarequired | object | Echo of the birth subject this forecast was built for. |
birthData.daterequired | string (date) | Birth date in YYYY-MM-DD format. Anchors the natal chart and the Vimshottari dasha sequence. |
birthData.timerequired | string (time) | Birth time in 24-hour HH:MM:SS format. Precision matters for the natal positions the transit aspects are measured against. |
birthData.timezonerequired | number | Decimal UTC offset the forecast was computed with, resolved from whatever the request sent. An IANA name is resolved to the offset in force at the birth date and time, so this is the literal number applied, never the name. |
birthData.latitudeoptional | number | Birth latitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. |
birthData.longitudeoptional | number | Birth longitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. |
startDaterequired | string | First day of the resolved forecast window. |
endDaterequired | string | Last day of the resolved forecast window after the horizon clamp. |
countrequired | number | Number of events in the timeline after deduplication, filtering, and the event cap. |
eventsrequired | array of object | The merged, time-ordered forecast events across the requested domains. |
events[].daterequired | string | Calendar date of the event in YYYY-MM-DD (UTC). |
events[].datetimerequired | string | Exact instant of the event as an ISO-8601 UTC datetime, to the nearest second. Astronomical events are refined to this instant by search, not reported at a daily sample point; a dasha-change is the period boundary itself, counted from the birth instant. |
events[].domainrequired | string enum | Forecast domain. western covers transit aspects, sign ingresses, retrograde stations, eclipses, and new and full moons. vedic covers Vimshottari mahadasha, antardasha, and pratyantardasha boundaries. biorhythm covers critical days. A stable machine value, never localized, so consumers can branch on it under any language. |
events[].typerequired | string enum | Event kind. transit-aspect, sign-ingress, retrograde-station, eclipse, and lunar-phase are western, dasha-change is vedic Vimshottari, critical-day is biorhythm. A stable machine value, never localized, so consumers can branch on it under any language. |
Show all fieldsShow fewer fields
| Field | Type | Description |
|---|---|---|
events[].bodyrequired | string | Primary subject of the event. A transiting planet for western events, Sun for a solar eclipse, Moon for a lunar eclipse or a new or full moon, or the critical cycle for biorhythm days. For a dasha-change, the Vimshottari lords outermost first, joined by a hyphen, then one space and the level: Saturn Mahadasha, Saturn-Mercury Antardasha, Saturn-Mercury-Ketu Pratyantardasha. Lords are always one of Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury. Never localized. |
events[].targetoptional | string | For a transit-aspect, the natal body the transit aspects. For a sign-ingress, the zodiac sign entered, and for a lunar-phase, the zodiac sign of the New or Full Moon. Absent for other event types. |
events[].aspectoptional | string | For a transit-aspect, the angular relationship. One of conjunction, sextile, square, trine, opposition. Absent for other event types. |
events[].orboptional | number | For a transit-aspect, the separation in degrees from the exact aspect at the reported instant, rounded to three decimals. The instant is the moment the aspect perfects, so this reads 0. Absent for other event types. |
events[].stationoptional | string enum | For a retrograde-station, whether the planet turns retrograde or direct. A stable machine value, never localized. Absent for other event types. |
events[].kindoptional | string enum | For an eclipse, its classification. total and penumbral apply to lunar eclipses, partial applies to both, annular and total apply to solar eclipses. A stable machine value, never localized. Absent for other event types. |
events[].obscurationoptional | number | For a lunar eclipse, the peak fraction from 0 to 1 of the Moon disc covered by Earth umbra. 1 for a total lunar eclipse, between 0 and 1 for a partial, 0 for a penumbral. Absent for solar eclipses and other event types. |
events[].phaseoptional | string enum | For a lunar-phase event, which syzygy it is: new-moon (Sun-Moon conjunction) or full-moon (Sun-Moon opposition). The intermediate quarters are not emitted. A stable machine value, never localized. Absent for other event types. |
events[].descriptionrequired | string | Plain-language summary of the event, suitable for direct display. The only localized field: when lang is set this sentence, and the body, target, and aspect names within it, render in the requested language while the structured fields stay English. |
events[].significancerequired | number | Importance score from 0 to 100. Outer-planet exact transit aspects and mahadasha changes score highest; fast Moon events and biorhythm critical days score lower. When domainWeights is supplied this is the weighted score, rounded and clamped to 0 to 100, which is the same value the significance floor and the event cap acted on. |
Example response
{
"birthData": {
"date": "1990-07-15",
"time": "13:30:00",
"timezone": -4,
"latitude": 0,
"longitude": 0
},
"startDate": "2026-06-01",
"endDate": "2026-08-30",
"count": 42,
"events": [
{
"date": "2026-07-04",
"datetime": "2026-07-04T08:42:11Z",
"domain": "western",
"type": "transit-aspect",
"body": "Saturn",
"target": "Moon",
"aspect": "square",
"orb": 0,
"station": "retrograde",
"kind": "total",
"obscuration": 0.966,
"phase": "full-moon",
"description": "Transiting Saturn square natal Moon, an exact aspect.",
"significance": 90
}
]
}Significant dates
https://roxyapi.com/api/v2/forecast/significant-datesReturn only the high-significance dates from the merged cross-domain forecast for a single birth subject: the rare outer-planet exact transit aspects, slow-planet sign ingresses, retrograde stations, and Vimshottari mahadasha and antardasha changes that mark genuine turning points. Defaults to a significance floor of 70 so the response is a short list of the most meaningful upcoming dates. Built for what-is-coming highlights, timing alerts, and at-a-glance forecast strips.
Call it
import { createRoxy } from '@roxyapi/sdk'
const roxy = createRoxy(process.env.ROXY_API_KEY!)
const { data } = await roxy.forecast.findSignificantDates({ body: { birthData: { date: '1990-07-15', time: '13:30:00', timezone: 'America/New_York', latitude: 0, longitude: 0 } } })Install: npm install @roxyapi/sdk
from roxy_sdk import create_roxy
roxy = create_roxy("YOUR_API_KEY")
result = roxy.forecast.find_significant_dates(birth_data={'date': '1990-07-15', 'time': '13:30:00', 'timezone': 'America/New_York', 'latitude': 0, 'longitude': 0})Install: pip install roxy-sdk
use function RoxyAPI\Sdk\createRoxy;
$roxy = createRoxy(getenv('ROXY_API_KEY'));
$result = $roxy->forecast->findSignificantDates(birthData: ['date' => '1990-07-15', 'time' => '13:30:00', 'timezone' => 'America/New_York', 'latitude' => 0, 'longitude' => 0]);Install: composer require roxyapi/sdk
using RoxyApi;
var roxy = new RoxyClient(Environment.GetEnvironmentVariable("ROXY_API_KEY")!);
var result = await roxy.Forecast.SignificantDates.PostAsync(new() { /* request fields above */ });Install: dotnet add package RoxyApi.Sdk
import roxyapi "github.com/RoxyAPI/sdk-go"
roxy, _ := roxyapi.NewRoxy(os.Getenv("ROXY_API_KEY"))
resp, _ := roxy.Forecast.FindSignificantDates(ctx, nil, roxyapi.FindSignificantDatesJSONRequestBody{ /* request fields above */ })Install: go get github.com/RoxyAPI/sdk-go
use roxyapi::{Roxy, types};
async fn call(roxy: &Roxy, params: &types::FindSignificantDatesParams, body: &types::FindSignificantDatesRequest) -> Result<(), roxyapi::Error> {
let result = roxy.forecast().find_significant_dates(params, body).await?;
println!("{result:?}");
Ok(())
}Install: cargo add roxyapi
curl -X POST "https://roxyapi.com/api/v2/forecast/significant-dates" \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"birthData":{"date":"1990-07-15","time":"13:30:00","timezone":"America/New_York","latitude":0,"longitude":0}}'Typed SDKs in 6 languages. On Remote MCP this is the tool post_forecast_significant_dates on the Forecast server, https://roxyapi.com/mcp/forecast.
Parameters
| Parameter | Type | Description |
|---|---|---|
langquery, optional | string enum | Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English. Default en. |
Request body
| Field | Type | Description |
|---|---|---|
birthDatarequired | object | The single birth subject this forecast is built for. One object only, never an array. |
birthData.daterequired | string (date) | Birth date in YYYY-MM-DD format. Anchors the natal chart and the Vimshottari dasha sequence. |
birthData.timerequired | string (time) | Birth time in 24-hour HH:MM:SS format. Precision matters for the natal positions the transit aspects are measured against. |
birthData.timezonerequired | number or string | IANA name (e.g. "America/New_York", "Europe/London", "UTC"), decimal hours (e.g. -5 for EST, 1 for CET), or a fixed UTC offset (e.g. "-05:00", "+01:00"). Prefer the IANA name: it is resolved to the offset in force at the birth date and time, historical daylight-saving rules included, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state at that moment. On a transition day a time in the repeated hour is read as its first occurrence and a time in the skipped hour is moved forward past the gap. Invalid timezones return 400 with a validation error. |
birthData.latitudeoptional | number | Birth latitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. |
birthData.longitudeoptional | number | Birth longitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. |
startDateoptional | string (date) | First day of the window in YYYY-MM-DD format. Defaults to today in UTC. |
endDateoptional | string (date) | Last day of the window in YYYY-MM-DD format. Defaults to startDate plus 30 days. Clamped to a maximum of 90 days from startDate. |
domainsoptional | array of string enum | Which forecast domains to consider before filtering by significance. Defaults to all three. |
minSignificanceoptional | number | Significance floor from 0 to 100 for what counts as a significant date. Defaults to 70. |
domainWeightsoptional | object | Per-domain significance multipliers applied before the significance floor and event cap. Bias which domains survive filtering and the cap. Omitted domains default to a weight of 1. Valid keys are western, vedic, and biorhythm. |
domainWeights.westernoptional | number | Multiplier for this domain significance. 1 leaves it unchanged, above 1 promotes the domain, below 1 demotes it. |
domainWeights.vedicoptional | number | Multiplier for this domain significance. 1 leaves it unchanged, above 1 promotes the domain, below 1 demotes it. |
domainWeights.biorhythmoptional | number | Multiplier for this domain significance. 1 leaves it unchanged, above 1 promotes the domain, below 1 demotes it. |
Response fields
| Field | Type | Description |
|---|---|---|
birthDatarequired | object | Echo of the birth subject this forecast was built for. |
birthData.daterequired | string (date) | Birth date in YYYY-MM-DD format. Anchors the natal chart and the Vimshottari dasha sequence. |
birthData.timerequired | string (time) | Birth time in 24-hour HH:MM:SS format. Precision matters for the natal positions the transit aspects are measured against. |
birthData.timezonerequired | number | Decimal UTC offset the forecast was computed with, resolved from whatever the request sent. An IANA name is resolved to the offset in force at the birth date and time, so this is the literal number applied, never the name. |
birthData.latitudeoptional | number | Birth latitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. |
birthData.longitudeoptional | number | Birth longitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. |
startDaterequired | string | First day of the resolved forecast window. |
endDaterequired | string | Last day of the resolved forecast window after the horizon clamp. |
countrequired | number | Number of events in the timeline after deduplication, filtering, and the event cap. |
eventsrequired | array of object | The merged, time-ordered forecast events across the requested domains. |
events[].daterequired | string | Calendar date of the event in YYYY-MM-DD (UTC). |
events[].datetimerequired | string | Exact instant of the event as an ISO-8601 UTC datetime, to the nearest second. Astronomical events are refined to this instant by search, not reported at a daily sample point; a dasha-change is the period boundary itself, counted from the birth instant. |
events[].domainrequired | string enum | Forecast domain. western covers transit aspects, sign ingresses, retrograde stations, eclipses, and new and full moons. vedic covers Vimshottari mahadasha, antardasha, and pratyantardasha boundaries. biorhythm covers critical days. A stable machine value, never localized, so consumers can branch on it under any language. |
events[].typerequired | string enum | Event kind. transit-aspect, sign-ingress, retrograde-station, eclipse, and lunar-phase are western, dasha-change is vedic Vimshottari, critical-day is biorhythm. A stable machine value, never localized, so consumers can branch on it under any language. |
Show all fieldsShow fewer fields
| Field | Type | Description |
|---|---|---|
events[].bodyrequired | string | Primary subject of the event. A transiting planet for western events, Sun for a solar eclipse, Moon for a lunar eclipse or a new or full moon, or the critical cycle for biorhythm days. For a dasha-change, the Vimshottari lords outermost first, joined by a hyphen, then one space and the level: Saturn Mahadasha, Saturn-Mercury Antardasha, Saturn-Mercury-Ketu Pratyantardasha. Lords are always one of Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury. Never localized. |
events[].targetoptional | string | For a transit-aspect, the natal body the transit aspects. For a sign-ingress, the zodiac sign entered, and for a lunar-phase, the zodiac sign of the New or Full Moon. Absent for other event types. |
events[].aspectoptional | string | For a transit-aspect, the angular relationship. One of conjunction, sextile, square, trine, opposition. Absent for other event types. |
events[].orboptional | number | For a transit-aspect, the separation in degrees from the exact aspect at the reported instant, rounded to three decimals. The instant is the moment the aspect perfects, so this reads 0. Absent for other event types. |
events[].stationoptional | string enum | For a retrograde-station, whether the planet turns retrograde or direct. A stable machine value, never localized. Absent for other event types. |
events[].kindoptional | string enum | For an eclipse, its classification. total and penumbral apply to lunar eclipses, partial applies to both, annular and total apply to solar eclipses. A stable machine value, never localized. Absent for other event types. |
events[].obscurationoptional | number | For a lunar eclipse, the peak fraction from 0 to 1 of the Moon disc covered by Earth umbra. 1 for a total lunar eclipse, between 0 and 1 for a partial, 0 for a penumbral. Absent for solar eclipses and other event types. |
events[].phaseoptional | string enum | For a lunar-phase event, which syzygy it is: new-moon (Sun-Moon conjunction) or full-moon (Sun-Moon opposition). The intermediate quarters are not emitted. A stable machine value, never localized. Absent for other event types. |
events[].descriptionrequired | string | Plain-language summary of the event, suitable for direct display. The only localized field: when lang is set this sentence, and the body, target, and aspect names within it, render in the requested language while the structured fields stay English. |
events[].significancerequired | number | Importance score from 0 to 100. Outer-planet exact transit aspects and mahadasha changes score highest; fast Moon events and biorhythm critical days score lower. When domainWeights is supplied this is the weighted score, rounded and clamped to 0 to 100, which is the same value the significance floor and the event cap acted on. |
Example response
{
"birthData": {
"date": "1990-07-15",
"time": "13:30:00",
"timezone": -4,
"latitude": 0,
"longitude": 0
},
"startDate": "2026-06-01",
"endDate": "2026-08-30",
"count": 42,
"events": [
{
"date": "2026-07-04",
"datetime": "2026-07-04T08:42:11Z",
"domain": "western",
"type": "transit-aspect",
"body": "Saturn",
"target": "Moon",
"aspect": "square",
"orb": 0,
"station": "retrograde",
"kind": "total",
"obscuration": 0.966,
"phase": "full-moon",
"description": "Transiting Saturn square natal Moon, an exact aspect.",
"significance": 90
}
]
}Forecast digest
https://roxyapi.com/api/v2/forecast/digestRoll the cross-domain forecast for a single birth subject into four pre-summarized windows: the next 24 hours, 7 days, 30 days, and 90 days from the start date. Each window returns its event count, a per-domain count breakdown, a per-type count breakdown, and the top highest-significance events. Built for a glanceable what-is-coming strip so a caller can render the upcoming highlights without scanning the full event list.
Call it
import { createRoxy } from '@roxyapi/sdk'
const roxy = createRoxy(process.env.ROXY_API_KEY!)
const { data } = await roxy.forecast.generateDigest({ body: { birthData: { date: '1990-07-15', time: '13:30:00', timezone: 'America/New_York', latitude: 0, longitude: 0 } } })Install: npm install @roxyapi/sdk
from roxy_sdk import create_roxy
roxy = create_roxy("YOUR_API_KEY")
result = roxy.forecast.generate_digest(birth_data={'date': '1990-07-15', 'time': '13:30:00', 'timezone': 'America/New_York', 'latitude': 0, 'longitude': 0})Install: pip install roxy-sdk
use function RoxyAPI\Sdk\createRoxy;
$roxy = createRoxy(getenv('ROXY_API_KEY'));
$result = $roxy->forecast->generateDigest(birthData: ['date' => '1990-07-15', 'time' => '13:30:00', 'timezone' => 'America/New_York', 'latitude' => 0, 'longitude' => 0]);Install: composer require roxyapi/sdk
using RoxyApi;
var roxy = new RoxyClient(Environment.GetEnvironmentVariable("ROXY_API_KEY")!);
var result = await roxy.Forecast.Digest.PostAsync(new() { /* request fields above */ });Install: dotnet add package RoxyApi.Sdk
import roxyapi "github.com/RoxyAPI/sdk-go"
roxy, _ := roxyapi.NewRoxy(os.Getenv("ROXY_API_KEY"))
resp, _ := roxy.Forecast.GenerateDigest(ctx, nil, roxyapi.GenerateDigestJSONRequestBody{ /* request fields above */ })Install: go get github.com/RoxyAPI/sdk-go
use roxyapi::{Roxy, types};
async fn call(roxy: &Roxy, params: &types::GenerateDigestParams, body: &types::GenerateDigestRequest) -> Result<(), roxyapi::Error> {
let result = roxy.forecast().generate_digest(params, body).await?;
println!("{result:?}");
Ok(())
}Install: cargo add roxyapi
curl -X POST "https://roxyapi.com/api/v2/forecast/digest" \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"birthData":{"date":"1990-07-15","time":"13:30:00","timezone":"America/New_York","latitude":0,"longitude":0}}'Typed SDKs in 6 languages. On Remote MCP this is the tool post_forecast_digest on the Forecast server, https://roxyapi.com/mcp/forecast.
Parameters
| Parameter | Type | Description |
|---|---|---|
langquery, optional | string enum | Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English. Default en. |
Request body
| Field | Type | Description |
|---|---|---|
birthDatarequired | object | The single birth subject this digest is built for. One object only, never an array. |
birthData.daterequired | string (date) | Birth date in YYYY-MM-DD format. Anchors the natal chart and the Vimshottari dasha sequence. |
birthData.timerequired | string (time) | Birth time in 24-hour HH:MM:SS format. Precision matters for the natal positions the transit aspects are measured against. |
birthData.timezonerequired | number or string | IANA name (e.g. "America/New_York", "Europe/London", "UTC"), decimal hours (e.g. -5 for EST, 1 for CET), or a fixed UTC offset (e.g. "-05:00", "+01:00"). Prefer the IANA name: it is resolved to the offset in force at the birth date and time, historical daylight-saving rules included, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state at that moment. On a transition day a time in the repeated hour is read as its first occurrence and a time in the skipped hour is moved forward past the gap. Invalid timezones return 400 with a validation error. |
birthData.latitudeoptional | number | Birth latitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. |
birthData.longitudeoptional | number | Birth longitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. |
startDateoptional | string (date) | Start anchor for every window in YYYY-MM-DD format. The next 24h, 7d, 30d, and 90d windows are measured forward from this date at 00:00:00 UTC. Defaults to today in UTC. |
domainsoptional | array of string enum | Which forecast domains to include before rolling up the windows. Defaults to all three. |
minSignificanceoptional | number | Drop events scoring below this significance threshold from 0 to 100 before the rollup. Defaults to 0. |
domainWeightsoptional | object | Per-domain significance multipliers applied before the significance floor and event cap. Bias which domains survive filtering and the cap. Omitted domains default to a weight of 1. Valid keys are western, vedic, and biorhythm. |
domainWeights.westernoptional | number | Multiplier for this domain significance. 1 leaves it unchanged, above 1 promotes the domain, below 1 demotes it. |
domainWeights.vedicoptional | number | Multiplier for this domain significance. 1 leaves it unchanged, above 1 promotes the domain, below 1 demotes it. |
domainWeights.biorhythmoptional | number | Multiplier for this domain significance. 1 leaves it unchanged, above 1 promotes the domain, below 1 demotes it. |
topoptional | integer | Number of highest-significance events to surface per window. Defaults to 3, capped at 20. |
Response fields
| Field | Type | Description |
|---|---|---|
birthDatarequired | object | Echo of the birth subject this digest was built for. |
birthData.daterequired | string (date) | Birth date in YYYY-MM-DD format. Anchors the natal chart and the Vimshottari dasha sequence. |
birthData.timerequired | string (time) | Birth time in 24-hour HH:MM:SS format. Precision matters for the natal positions the transit aspects are measured against. |
birthData.timezonerequired | number | Decimal UTC offset the forecast was computed with, resolved from whatever the request sent. An IANA name is resolved to the offset in force at the birth date and time, so this is the literal number applied, never the name. |
birthData.latitudeoptional | number | Birth latitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. |
birthData.longitudeoptional | number | Birth longitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. |
startDaterequired | string | Start anchor every window is measured from. |
endDaterequired | string | Last day of the resolved 90 day horizon the timeline was built over before slicing. |
windowsrequired | array of object | The four rollups in ascending window length: next 24h, 7d, 30d, and 90d from the start anchor. |
windows[].daysrequired | number | Length of this window in days forward from the start anchor. One of 1, 7, 30, 90. |
windows[].fromrequired | string | Inclusive lower bound of the window as an ISO-8601 UTC datetime, the start anchor. |
windows[].torequired | string | Exclusive upper bound of the window as an ISO-8601 UTC datetime, the start anchor plus the window length. |
windows[].countrequired | number | Number of events whose datetime falls inside this window. |
windows[].byDomainrequired | object | Count of events in this window broken down by domain. Only domains with at least one event in the window are present. The values sum to count. |
Show all fieldsShow fewer fields
| Field | Type | Description |
|---|---|---|
windows[].byDomain.westernoptional | number | Number of events in this window produced by this forecast domain. Absent when the domain contributed nothing, so a zero is never written. |
windows[].byDomain.vedicoptional | number | Number of events in this window produced by this forecast domain. Absent when the domain contributed nothing, so a zero is never written. |
windows[].byDomain.biorhythmoptional | number | Number of events in this window produced by this forecast domain. Absent when the domain contributed nothing, so a zero is never written. |
windows[].byTyperequired | object | Count of events in this window broken down by event type. Only types with at least one event in the window are present. The values sum to count. |
windows[].byType.transit-aspectoptional | number | Number of events in this window of this event type. Absent when the type did not occur, so a zero is never written. |
windows[].byType.sign-ingressoptional | number | Number of events in this window of this event type. Absent when the type did not occur, so a zero is never written. |
windows[].byType.retrograde-stationoptional | number | Number of events in this window of this event type. Absent when the type did not occur, so a zero is never written. |
windows[].byType.eclipseoptional | number | Number of events in this window of this event type. Absent when the type did not occur, so a zero is never written. |
windows[].byType.lunar-phaseoptional | number | Number of events in this window of this event type. Absent when the type did not occur, so a zero is never written. |
windows[].byType.dasha-changeoptional | number | Number of events in this window of this event type. Absent when the type did not occur, so a zero is never written. |
windows[].byType.critical-dayoptional | number | Number of events in this window of this event type. Absent when the type did not occur, so a zero is never written. |
windows[].toprequired | array of object | The highest-significance events in this window, most significant first, up to the requested top count. The same TimelineEvent shape as the timeline endpoints. |
windows[].top[].daterequired | string | Calendar date of the event in YYYY-MM-DD (UTC). |
windows[].top[].datetimerequired | string | Exact instant of the event as an ISO-8601 UTC datetime, to the nearest second. Astronomical events are refined to this instant by search, not reported at a daily sample point; a dasha-change is the period boundary itself, counted from the birth instant. |
windows[].top[].domainrequired | string enum | Forecast domain. western covers transit aspects, sign ingresses, retrograde stations, eclipses, and new and full moons. vedic covers Vimshottari mahadasha, antardasha, and pratyantardasha boundaries. biorhythm covers critical days. A stable machine value, never localized, so consumers can branch on it under any language. |
windows[].top[].typerequired | string enum | Event kind. transit-aspect, sign-ingress, retrograde-station, eclipse, and lunar-phase are western, dasha-change is vedic Vimshottari, critical-day is biorhythm. A stable machine value, never localized, so consumers can branch on it under any language. |
windows[].top[].bodyrequired | string | Primary subject of the event. A transiting planet for western events, Sun for a solar eclipse, Moon for a lunar eclipse or a new or full moon, or the critical cycle for biorhythm days. For a dasha-change, the Vimshottari lords outermost first, joined by a hyphen, then one space and the level: Saturn Mahadasha, Saturn-Mercury Antardasha, Saturn-Mercury-Ketu Pratyantardasha. Lords are always one of Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury. Never localized. |
windows[].top[].targetoptional | string | For a transit-aspect, the natal body the transit aspects. For a sign-ingress, the zodiac sign entered, and for a lunar-phase, the zodiac sign of the New or Full Moon. Absent for other event types. |
windows[].top[].aspectoptional | string | For a transit-aspect, the angular relationship. One of conjunction, sextile, square, trine, opposition. Absent for other event types. |
windows[].top[].orboptional | number | For a transit-aspect, the separation in degrees from the exact aspect at the reported instant, rounded to three decimals. The instant is the moment the aspect perfects, so this reads 0. Absent for other event types. |
windows[].top[].stationoptional | string enum | For a retrograde-station, whether the planet turns retrograde or direct. A stable machine value, never localized. Absent for other event types. |
windows[].top[].kindoptional | string enum | For an eclipse, its classification. total and penumbral apply to lunar eclipses, partial applies to both, annular and total apply to solar eclipses. A stable machine value, never localized. Absent for other event types. |
windows[].top[].obscurationoptional | number | For a lunar eclipse, the peak fraction from 0 to 1 of the Moon disc covered by Earth umbra. 1 for a total lunar eclipse, between 0 and 1 for a partial, 0 for a penumbral. Absent for solar eclipses and other event types. |
windows[].top[].phaseoptional | string enum | For a lunar-phase event, which syzygy it is: new-moon (Sun-Moon conjunction) or full-moon (Sun-Moon opposition). The intermediate quarters are not emitted. A stable machine value, never localized. Absent for other event types. |
windows[].top[].descriptionrequired | string | Plain-language summary of the event, suitable for direct display. The only localized field: when lang is set this sentence, and the body, target, and aspect names within it, render in the requested language while the structured fields stay English. |
windows[].top[].significancerequired | number | Importance score from 0 to 100. Outer-planet exact transit aspects and mahadasha changes score highest; fast Moon events and biorhythm critical days score lower. When domainWeights is supplied this is the weighted score, rounded and clamped to 0 to 100, which is the same value the significance floor and the event cap acted on. |
Example response
{
"birthData": {
"date": "1990-07-15",
"time": "13:30:00",
"timezone": -4,
"latitude": 0,
"longitude": 0
},
"startDate": "2026-06-01",
"endDate": "2026-08-29",
"windows": [
{
"days": 7,
"from": "2026-06-01T00:00:00Z",
"to": "2026-06-08T00:00:00Z",
"count": 5,
"byDomain": {
"western": 3,
"vedic": 1,
"biorhythm": 1
},
"byType": {
"transit-aspect": 3,
"sign-ingress": 1,
"critical-day": 1
},
"top": [
{
"date": "2026-07-04",
"datetime": "2026-07-04T08:42:11Z",
"domain": "western",
"type": "transit-aspect",
"body": "Saturn",
"target": "Moon",
"aspect": "square",
"orb": 0,
"station": "retrograde",
"kind": "total",
"obscuration": 0.966,
"phase": "full-moon",
"description": "Transiting Saturn square natal Moon, an exact aspect.",
"significance": 90
}
]
}
]
}Solar return chart
https://roxyapi.com/api/v2/forecast/solar-returnCast the solar return chart for one subject and year: the chart erected for the exact moment the transiting Sun returns to its natal ecliptic longitude, the foundational technique for annual astrological forecasting. Returns the full tropical chart with planetary positions, house cusps, aspects, Ascendant, and Midheaven. Location-sensitive: pass the birthplace to anchor the chart to natal geography, or the current city for a relocated solar return where the houses and Ascendant shift to where you are on your birthday. Built for year-ahead forecast tools, birthday charts, and annual horoscope features.
Call it
import { createRoxy } from '@roxyapi/sdk'
const roxy = createRoxy(process.env.ROXY_API_KEY!)
const { data } = await roxy.forecast.forecastSolarReturn({ body: { date: '1990-07-15', time: '14:30:00', year: 2026, latitude: 40.7128, longitude: -74.006, timezone: 'America/New_York' } })Install: npm install @roxyapi/sdk
from roxy_sdk import create_roxy
roxy = create_roxy("YOUR_API_KEY")
result = roxy.forecast.forecast_solar_return(date='1990-07-15', time='14:30:00', year=2026, latitude=40.7128, longitude=-74.006, timezone='America/New_York')Install: pip install roxy-sdk
use function RoxyAPI\Sdk\createRoxy;
$roxy = createRoxy(getenv('ROXY_API_KEY'));
$result = $roxy->forecast->forecastSolarReturn(date: '1990-07-15', time: '14:30:00', year: 2026, latitude: 40.7128, longitude: -74.006, timezone: 'America/New_York');Install: composer require roxyapi/sdk
using RoxyApi;
var roxy = new RoxyClient(Environment.GetEnvironmentVariable("ROXY_API_KEY")!);
var result = await roxy.Forecast.SolarReturn.PostAsync(new() { /* request fields above */ });Install: dotnet add package RoxyApi.Sdk
import roxyapi "github.com/RoxyAPI/sdk-go"
roxy, _ := roxyapi.NewRoxy(os.Getenv("ROXY_API_KEY"))
resp, _ := roxy.Forecast.ForecastSolarReturn(ctx, nil, roxyapi.ForecastSolarReturnJSONRequestBody{ /* request fields above */ })Install: go get github.com/RoxyAPI/sdk-go
use roxyapi::{Roxy, types};
async fn call(roxy: &Roxy, params: &types::ForecastSolarReturnParams, body: &types::ForecastSolarReturnRequest) -> Result<(), roxyapi::Error> {
let result = roxy.forecast().forecast_solar_return(params, body).await?;
println!("{result:?}");
Ok(())
}Install: cargo add roxyapi
curl -X POST "https://roxyapi.com/api/v2/forecast/solar-return" \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"1990-07-15","time":"14:30:00","year":2026,"latitude":40.7128,"longitude":-74.006,"timezone":"America/New_York"}'Typed SDKs in 6 languages. On Remote MCP this is the tool post_forecast_solar_return on the Forecast server, https://roxyapi.com/mcp/forecast.
Parameters
| Parameter | Type | Description |
|---|---|---|
langquery, optional | string enum | Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English. Default en. |
Request body
| Field | Type | Description |
|---|---|---|
daterequired | string (date) | Birth date in YYYY-MM-DD format. Anchors the natal Sun longitude the transiting Sun returns to each year. |
timerequired | string (time) | Birth time in 24-hour HH:MM:SS format. Pins the exact natal Sun position that defines the solar return moment. |
yearrequired | integer | Year to cast the solar return for. The chart is erected for the moment in this year when the transiting Sun returns to the natal Sun longitude, on or within a day of the birthday. |
latituderequired | number | Latitude of the solar return location in decimal degrees. The solar return is location-sensitive: use the birthplace to anchor the chart to natal geography, or the current city for a relocated solar return. |
longituderequired | number | Longitude of the solar return location in decimal degrees. Sets the local sidereal time, so it drives the Ascendant, Midheaven, and house cusps of the return chart. |
timezonerequired | number or string | IANA name (e.g. "America/New_York", "Europe/London", "UTC"), decimal hours (e.g. -5 for EST, 1 for CET), or a fixed UTC offset (e.g. "-05:00", "+01:00"). Prefer the IANA name: it is resolved to the offset in force at the birth date and time, historical daylight-saving rules included, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state at that moment. On a transition day a time in the repeated hour is read as its first occurrence and a time in the skipped hour is moved forward past the gap. Invalid timezones return 400 with a validation error. |
houseSystemoptional | string enum | House system for the return chart. placidus is the Western default. whole-sign, equal, and koch are also supported. |
Response fields
| Field | Type | Description |
|---|---|---|
birthDaterequired | string | Echo of the birth date used to find the natal Sun longitude. |
solarReturnDaterequired | string | Exact solar return moment, when the transiting Sun returns to the natal Sun longitude, formatted in the requested timezone. The astrological birthday for the year. |
solarReturnYearrequired | number | Year of this solar return. The chart covers the period to the next birthday. |
locationrequired | object | Location the return chart was cast for. The Ascendant and house cusps change with this location, the basis of the relocated solar return technique. |
location.latituderequired | number | Latitude used for the return chart house cusps and Ascendant. |
location.longituderequired | number | Longitude used for local sidereal time and the Midheaven. |
location.timezonerequired | number | Decimal timezone offset applied to the output datetime. |
natalSunPositionrequired | object | The natal Sun position whose annual return defines this chart. |
natalSunPosition.longituderequired | number | Natal Sun ecliptic longitude in degrees from 0 to 360 that the Sun returns to. |
natalSunPosition.signrequired | string | Tropical zodiac sign of the natal Sun. |
natalSunPosition.degreerequired | number | Degree within the sign from 0 to 29.999 that the Sun returns to. |
chartrequired | object | Full chart erected for the solar return moment: all bodies with house placements, the 12 house cusps, aspects, Part of Fortune, and Vertex in the tropical zodiac. |
chart.birthDetailsrequired | object | Birth details used to generate this chart. |
chart.birthDetails.daterequired | string (date) | Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. |
Show all fieldsShow fewer fields
Example response
{
"birthDate": "1990-07-15",
"solarReturnDate": "2026-07-15T08:42:11",
"solarReturnYear": 2026,
"location": {
"latitude": 40.7128,
"longitude": -74.006,
"timezone": -4
},
"natalSunPosition": {
"longitude": 112.45,
"sign": "Cancer",
"degree": 22.45
},
"chart": {
"birthDetails": {
"date": "1990-07-15",
"time": "14:30:00",
"latitude": 40.7128,
"longitude": -74.006,
"timezone": -4
},
"planets": [
{
"name": "Sun",
"longitude": 112.45,
"latitude": 0.01,
"sign": "Cancer",
"degree": 22.45,
"house": 7,
"speed": 0.9571,
"isRetrograde": false
}
],
"houses": [
{
"number": 1,
"longitude": 45.32,
"sign": "Taurus",
"degree": 15.32
}
],
"houseSystem": "placidus",
"aspects": [
{
"planet1": "Sun",
"planet2": "Moon",
"type": "TRINE",
"angle": 120,
"orb": 2.5,
"isApplying": true,
"strength": 75,
"interpretation": "harmonious"
}
],
"partOfFortune": {
"sign": "Aries",
"degree": 27.24,
"longitude": 27.24,
"house": 8,
"sect": "night"
},
"vertex": {
"sign": "Virgo",
"degree": 12.9,
"longitude": 162.9,
"house": 6
}
}
}Hi, I am Rosie, your guide to the RoxyAPI insight tools.
Ask me to read your birth chart, pull a card, or map your numbers, and I will interpret what it means for you. Unlike most AIs, I never make the numbers up: every reading runs on real, verified calculations. Curious about the API, pricing, or docs instead? Ask me that too.
