Transit Aspects
POST https://starsapi.com/api/v3/western/predictions/transit-natal-aspects
Computes current (or specified date) planetary positions and finds all major aspects between transiting planets and natal planets. Returns each aspect with orb deviation, applying/separating status, nature label, retrograde flag, and a prewritten interpretation with keyword pills. Covers all 5 major aspects (conjunction, sextile, square, trine, opposition) between 10 transiting and 10 natal planets — 470 unique interpretations written specifically for the transit context.
This is the #1 engagement feature for subscription astrology apps — “Transiting Saturn is squaring your natal Neptune” is the language that makes users open the app every day.
Transit orbs
| Aspect | Angle | General orb | Luminary orb | Nature |
|---|---|---|---|---|
| Conjunction | 0° | 8° | 10° | Fusion |
| Sextile | 60° | 4° | 5° | Smooth |
| Square | 90° | 6° | 8° | Friction |
| Trine | 120° | 6° | 8° | Lucky |
| Opposition | 180° | 6° | 8° | Tense |
Luminary orbs apply when either the transiting or the natal planet is the Sun or Moon.
Authentication
| Method | Example |
|---|---|
| Header (recommended) | X-Api-Key: sa_live_xxxxxxxxxxxx |
| Bearer | Authorization: Bearer sa_live_xxxxxxxxxxxx |
| Query | ?api_key=sa_live_xxxxxxxxxxxx |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| Natal birth data | |||
year | integer | Yes | Birth year (1800–2400). |
month | integer | Yes | Birth month, 1–12. |
day | integer | Yes | Birth day. |
hour | integer | Yes | Birth hour, 0–23. |
minute | integer | Yes | Birth minute, 0–59. |
second | integer | No | Default 0. |
latitude | number | Yes | Birth latitude, decimal degrees. |
longitude | number | Yes | Birth longitude, decimal degrees. |
timezone | string | Yes | Birth IANA timezone. |
| Transit date (optional — defaults to now) | |||
transit_year | integer | No | Transit year (1800–2400). |
transit_month | integer | No | Transit month. |
transit_day | integer | No | Transit day. |
transit_hour | integer | No | Transit hour. Default 12. |
transit_minute | integer | No | Transit minute. Default 0. |
transit_timezone | string | No | Transit timezone. Defaults to natal timezone. |
| Options | |||
language | string | No | Language code. Default en. |
house_system | string | No | Default placidus. |
include_timing | boolean | No | Default false. When true, every aspect gains a timing object with entry → exact → exit datetimes. Response is unchanged when omitted. |
timing_scope | string | No | active (default) or nearest. See Aspect timing. |
node_type | string | No | mean (default) or true — node used by the timing engine. |
Aspect timing
Pass include_timing: true to attach precise entry → exact → exit timing to each aspect, computed by the same engine as transit/natal-transit-aspects.
timing_scope | What it returns | Speed |
|---|---|---|
active | Timing only for aspects whose orb window is active on the transit date (typically 10–20). Others get timing: null. | Fast (<0.5s) — use for the first screen. |
nearest | The nearest exact (past or future, ±1 year) for every aspect. future: true means the perfection is still ahead. | Heavier (~2–3s) — load on demand (e.g. behind a “show timing” tap). |
timing is null when no exact falls within the scope, and for mirrored node pairs (transiting North Node ↔ natal South Node) — those duplicate the corresponding same-node aspect, which does carry timing. Local times are in the transit timezone; UTC fields are always provided.
Response shape
| Field | Type | Description |
|---|---|---|
natal_date | string | Birth date (YYYY-MM-DD). |
transit_date | string | Transit date (YYYY-MM-DD). |
aspect_count | integer | Number of in-orb transit aspects found. |
transit_aspects[] | array | Sorted by orb (tightest first). Each entry: |
.transit_planet | string | Transiting planet name. |
.transit_sign | string | Sign the transiting planet currently occupies. |
.natal_planet | string | Natal planet being aspected. |
.natal_sign | string | Sign the natal planet occupies. |
.aspect | string | One of conjunction, sextile, square, trine, opposition. |
.nature | string | UI label: Fusion, Smooth, Friction, Lucky, Tense. |
.orb_deviation | number | Deviation from exact aspect, decimal degrees. |
.applying | boolean | true if aspect is tightening, false if separating. |
.transit_retrograde | boolean | Whether the transiting planet is retrograde. |
.prediction | object | title, text, keywords array. |
.timing | object|null | Only when include_timing is true. entry_utc/entry_local, exact_utc/exact_local, exit_utc/exit_local, duration_days, phase (applying/separating), is_perfected, future. |
timing_scope | string | Echoed when include_timing is true. |
Usage notes
For daily horoscope apps, call this endpoint once per day per user with transit_year/month/day set to today. The tightest-orb aspects (first in the array) are the most relevant influences for that day. Outer planet transits (Saturn, Uranus, Neptune, Pluto) are the most commercially valuable because they describe multi-week or multi-month themes that drive subscription engagement.
Errors
| HTTP | Code | Cause |
|---|---|---|
| 400 | MISSING_FIELD | Required field absent. |
| 400 | INVALID_DATE | Bad natal or transit date. |
| 400 | INVALID_TIMEZONE | Non-IANA timezone. |
| 400 | INVALID_COORDINATE | Lat/lon out of range. |
| 400 | INVALID_PARAM | timing_scope not active/nearest. |
| 405 | METHOD_NOT_ALLOWED | Non-POST request. |