Western Compatibility Score
Overall compatibility score (0-100) between two natal charts. Scores element affinity, synastry aspects between personal planets (Sun, Moon, Venus, Mars), and Sun/Moon/rising sign comparisons.
Endpoint
POST /v1/western/compatibility
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/compatibility" \
-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_compatibility(two_person_request=request)
print(result)
import { createClient, createConfig, westernCompatibility } from 'asterwise';
const client = createClient(createConfig({
baseUrl: 'https://api.asterwise.com',
headers: { Authorization: 'Bearer YOUR_API_KEY' },
}));
const result = await westernCompatibility({
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.overall_score | integer | |
| data.element_score | integer | |
| data.aspect_score | integer | |
| data.sun_sign_affinity | string | |
| data.moon_sign_affinity | string | |
| data.rising_sign_affinity | string | |
| data.person1_sun | string | |
| data.person2_sun | string | |
| data.person1_moon | string | |
| data.person2_moon | string | |
| data.key_aspects | array[object] | |
| data.key_aspects[].person1_planet | string | |
| data.key_aspects[].person2_planet | string | |
| data.key_aspects[].type | string | |
| data.key_aspects[].exact_angle | number | |
| data.key_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 |