Western Natal Chart — Tropical
Calculate a complete Western natal chart using the tropical zodiac and Swiss Ephemeris. Returns 10 planet positions (Sun through Pluto) with tropical longitudes, Placidus (or chosen) house placements, essential dignities, all active aspects using standard modern Western orbs, and element/modality/hemisphere statistics. House system options: placidus (default), koch, equal, whole_sign.
Endpoint
POST /v1/western/natal
Request parameters
| Field | Type | Required | Description |
|---|---|---|---|
| location | string | null | No | City name to resolve to lat/lon/tz automatically. Example: 'Mumbai' or 'New Delhi, India'. If provided, latitude, longitude and timezone are not required. |
| name | string | No | Person name associated with the birth record |
| date | string | Yes | Birth date in YYYY-MM-DD format |
| time | string | null | No | Birth time in HH:MM 24-hour format. If omitted, sunrise chart is used as fallback. |
| latitude | number | null | No | Latitude. Required if location not provided. |
| longitude | number | null | No | Longitude. Required if location not provided. |
| timezone | string | null | No | IANA timezone. Required if location not provided. |
| ayanamsa | string | No | Sidereal ayanamsa mode used in calculations |
| house_system | string | No | House system for Western natal chart. Placidus is the modern default. Koch is the second most popular. Equal and Whole Sign are sign-based systems. |
Example request
- curl
- Python
- TypeScript
curl -X POST "https://api.asterwise.com/v1/western/natal" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Arjun Mehta","date":"1985-11-12","time":"06:45","latitude":19.076,"longitude":72.8777,"timezone":"Asia/Kolkata","house_system":"placidus"}'
import asterwise
from asterwise.api.western_astrology_api import WesternAstrologyApi
from asterwise.models.western_natal_request import WesternNatalRequest
configuration = asterwise.Configuration(
host="https://api.asterwise.com",
access_token="YOUR_API_KEY",
)
request = WesternNatalRequest(
name="Arjun Mehta",
date="1985-11-12",
time="06:45",
latitude=19.076,
longitude=72.8777,
timezone="Asia/Kolkata",
house_system="placidus",
)
with asterwise.ApiClient(configuration) as client:
api = WesternAstrologyApi(client)
result = api.western_natal_chart(western_natal_request=request)
print(result)
import { createClient, createConfig, westernNatalChart } from 'asterwise';
const client = createClient(createConfig({
baseUrl: 'https://api.asterwise.com',
headers: { Authorization: 'Bearer YOUR_API_KEY' },
}));
const result = await westernNatalChart({
client,
body: {
"name": "Arjun Mehta",
"date": "1985-11-12",
"time": "06:45",
"latitude": 19.076,
"longitude": 72.8777,
"timezone": "Asia/Kolkata",
"house_system": "placidus"
},
});
console.log(result.data);
Example response
Response fields
| Field | Type | Description |
|---|---|---|
| success | boolean | True if the request succeeded |
| message | string | Human-readable status message |
| data | object | |
| data.zodiac | string | Always 'tropical' for Western natal |
| data.house_system | string | House system used |
| data.ascendant | object | |
| data.ascendant.longitude | number | Tropical ecliptic longitude 0–360° |
| data.ascendant.sign | string | Zodiac sign name |
| data.ascendant.sign_index | integer | Sign index 0=Aries … 11=Pisces |
| data.ascendant.degree_in_sign | number | Degrees within sign 0–29.999 |
| data.mc | object | |
| data.mc.longitude | number | Tropical ecliptic longitude 0–360° |
| data.mc.sign | string | Zodiac sign name |
| data.mc.sign_index | integer | Sign index 0=Aries … 11=Pisces |
| data.mc.degree_in_sign | number | Degrees within sign 0–29.999 |
| data.planets | array[object] | |
| data.planets[].name | string | Planet name |
| data.planets[].longitude | number | Tropical ecliptic longitude 0–360° |
| data.planets[].sign | string | Zodiac sign name |
| data.planets[].sign_index | integer | |
| data.planets[].degree_in_sign | number | Degrees within sign 0–29.999 |
| data.planets[].house | integer | House number (Placidus or chosen system) |
| data.planets[].is_retrograde | boolean | |
| data.planets[].dignity | string | Essential dignity: domicile | exaltation | detriment | fall | peregrine |
| data.planets[].dignity_score | integer | Essential dignity weight: domicile=5, exaltation=4, detriment=-5, fall=-4, peregrine=0 |
| data.planets[].is_exaltation_degree | boolean | True if planet is in the exact classical exaltation degree (Nth degree = N-1°00' to N-1°59'59"). Always false for outer planets (no exact degree defined). |
| data.planets[].dignity_disputed | boolean | True for outer planet (Uranus/Neptune/Pluto) exaltation/fall — no established consensus. |
| data.houses | array[object] | |
| data.houses[].house | integer | |
| data.houses[].cusp_longitude | number | Tropical ecliptic longitude of house cusp |
| data.houses[].sign | string | |
| data.houses[].sign_index | integer | |
| data.houses[].degree_in_sign | number | |
| data.aspects | array[object] | |
| data.aspects[].planet_a | string | |
| data.aspects[].planet_b | string | |
| data.aspects[].type | string | Aspect type: conjunction | opposition | trine | square | sextile | semisextile | semisquare | sesquiquadrate | quincunx |
| data.aspects[].exact_angle | number | Actual angular distance between planets |
| data.aspects[].orb | number | Difference from exact aspect angle (always positive) |
| data.aspects[].is_applying | boolean | True if the faster planet is moving toward exact aspect (orb decreasing). |
| data.elements | object | |
| data.elements.fire | integer | |
| data.elements.earth | integer | |
| data.elements.air | integer | |
| data.elements.water | integer | |
| data.elements.dominant | string | null | Most common element, or null if tied |
| data.modalities | object | |
| data.modalities.cardinal | integer | |
| data.modalities.fixed | integer | |
| data.modalities.mutable | integer | |
| data.modalities.dominant | string | null | |
| data.hemisphere | object | |
| data.hemisphere.eastern | integer | Planet count in houses 7–12 |
| data.hemisphere.western | integer | Planet count in houses 1–6 |
| data.hemisphere.northern | integer | Planet count in houses 1–6 (below horizon) |
| data.hemisphere.southern | integer | Planet count in houses 7–12 (above horizon) |
| data.ayanamsa_value | number | Always 0.0 — tropical zodiac |
| data.ayanamsa_used | string | |
| data.birth_time_provided | boolean | Whether a precise birth time was provided. False when birth time was not supplied or treated as unknown — calculations using this field will have lagna-dependent accuracy limits. |
Errors
| Code | Description | Reference |
|---|---|---|
| authentication_failed | Missing or invalid API key. | authentication_failed |
| ephemeris_unavailable | Upstream ephemeris service error. | ephemeris_unavailable |
| insufficient_tier | API key tier does not include this endpoint. | insufficient_tier |
| internal_error | Unexpected server error. | internal_error |
| ip_rate_limit_exceeded | Too many requests in a short window. | ip_rate_limit_exceeded |
| payload_too_large | Request body exceeds the size limit. | payload_too_large |
| resource_not_found | Referenced resource was not found. | resource_not_found |
| validation_error | Request body failed schema validation. | validation_error |