Western Composite Chart
Midpoint composite chart for two people using modern Western midpoint technique. Each composite planet is the midpoint of the two natal positions. Returns composite planets with dignities and internal aspects.
Endpoint
POST /v1/western/composite
Request parameters
| Field | Type | Required | Description |
|---|---|---|---|
| person1 | object | Yes | |
| person1.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. |
| person1.name | string | No | Person name associated with the birth record |
| person1.date | string | Yes | Birth date in YYYY-MM-DD format |
| person1.time | string | null | No | Birth time in HH:MM 24-hour format. If omitted, sunrise chart is used as fallback. |
| person1.latitude | number | null | No | Latitude. Required if location not provided. |
| person1.longitude | number | null | No | Longitude. Required if location not provided. |
| person1.timezone | string | null | No | IANA timezone. Required if location not provided. |
| person1.ayanamsa | string | No | Sidereal ayanamsa mode used in calculations |
| person2 | object | Yes | |
| person2.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. |
| person2.name | string | No | Person name associated with the birth record |
| person2.date | string | Yes | Birth date in YYYY-MM-DD format |
| person2.time | string | null | No | Birth time in HH:MM 24-hour format. If omitted, sunrise chart is used as fallback. |
| person2.latitude | number | null | No | Latitude. Required if location not provided. |
| person2.longitude | number | null | No | Longitude. Required if location not provided. |
| person2.timezone | string | null | No | IANA timezone. Required if location not provided. |
| person2.ayanamsa | string | No | Sidereal ayanamsa mode used in calculations |
Example request
- curl
- Python
- TypeScript
curl -X POST "https://api.asterwise.com/v1/western/composite" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"person1":{"name":"Arjun Mehta","date":"1985-11-12","time":"06:45","latitude":19.076,"longitude":72.8777,"timezone":"Asia/Kolkata"},"person2":{"name":"Sofia Shah","date":"1988-03-24","time":"14:30","latitude":28.6139,"longitude":77.209,"timezone":"Asia/Kolkata"}}'
import asterwise
from asterwise.api.western_astrology_api import WesternAstrologyApi
from asterwise.models.two_person_request import TwoPersonRequest
configuration = asterwise.Configuration(
host="https://api.asterwise.com",
access_token="YOUR_API_KEY",
)
request = TwoPersonRequest(
person1={'name': 'Arjun Mehta', 'date': '1985-11-12', 'time': '06:45', 'latitude': 19.076, 'longitude': 72.8777, 'timezone': 'Asia/Kolkata'},
person2={'name': 'Sofia Shah', 'date': '1988-03-24', 'time': '14:30', 'latitude': 28.6139, 'longitude': 77.209, 'timezone': 'Asia/Kolkata'},
)
with asterwise.ApiClient(configuration) as client:
api = WesternAstrologyApi(client)
result = api.western_composite(two_person_request=request)
print(result)
import { createClient, createConfig, westernComposite } from 'asterwise';
const client = createClient(createConfig({
baseUrl: 'https://api.asterwise.com',
headers: { Authorization: 'Bearer YOUR_API_KEY' },
}));
const result = await westernComposite({
client,
body: {
"person1": {
"name": "Arjun Mehta",
"date": "1985-11-12",
"time": "06:45",
"latitude": 19.076,
"longitude": 72.8777,
"timezone": "Asia/Kolkata"
},
"person2": {
"name": "Sofia Shah",
"date": "1988-03-24",
"time": "14:30",
"latitude": 28.6139,
"longitude": 77.209,
"timezone": "Asia/Kolkata"
}
},
});
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.planets | array[object] | |
| data.planets[].name | string | |
| data.planets[].longitude | number | |
| data.planets[].sign | string | |
| data.planets[].sign_index | integer | |
| data.planets[].degree_in_sign | number | |
| data.planets[].dignity | string | |
| data.planets[].dignity_score | integer | |
| data.ascendant_longitude | number | |
| data.ascendant_sign | string | |
| data.ascendant_sign_index | integer | |
| data.aspects | array[object] | |
| data.aspects[].person1_planet | string | |
| data.aspects[].person2_planet | string | |
| data.aspects[].type | string | |
| data.aspects[].exact_angle | number | |
| data.aspects[].orb | number |
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 |