Kundali Milan — Matchmaking
Complete Vedic compatibility analysis using Ashtakoot Guna Milan (36-point system). Returns all 8 koota scores, Mangal Dosha compatibility with Dosha Samya analysis, classical veto checks (Vedha and Rajju Dosha), supplementary checks (Mahendra, Stree Deergha), and compatibility narrative with strengths, concerns, and recommendation. Also known as Kundali Milan, Gun Milan, or Ashtakoot Milan. Calculates 36-point compatibility score with Rajju, Vedha, and Dosha Samya classical rules.
Endpoint
POST /v1/astro/matchmaking
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/astro/matchmaking" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"person1":{"date":"1985-11-12","time":"06:45","latitude":19.076,"longitude":72.8777,"timezone":"Asia/Kolkata"},"person2":{"date":"1988-03-24","time":"14:30","latitude":28.6139,"longitude":77.209,"timezone":"Asia/Kolkata"}}'
import asterwise
from asterwise.api.astrology_api import AstrologyApi
from asterwise.models.matchmaking_request import MatchmakingRequest
configuration = asterwise.Configuration(
host="https://api.asterwise.com",
access_token="YOUR_API_KEY",
)
request = MatchmakingRequest(
person1={'date': '1985-11-12', 'time': '06:45', 'latitude': 19.076, 'longitude': 72.8777, 'timezone': 'Asia/Kolkata'},
person2={'date': '1988-03-24', 'time': '14:30', 'latitude': 28.6139, 'longitude': 77.209, 'timezone': 'Asia/Kolkata'},
)
with asterwise.ApiClient(configuration) as client:
api = AstrologyApi(client)
result = api.matchmaking(matchmaking_request=request)
print(result)
import { createClient, createConfig, matchmaking } from 'asterwise';
const client = createClient(createConfig({
baseUrl: 'https://api.asterwise.com',
headers: { Authorization: 'Bearer YOUR_API_KEY' },
}));
const result = await matchmaking({
client,
body: {
"person1": {
"date": "1985-11-12",
"time": "06:45",
"latitude": 19.076,
"longitude": 72.8777,
"timezone": "Asia/Kolkata"
},
"person2": {
"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.total_score | number | Overall Guna Milan score out of 36 |
| data.breakdown | object | Per-koota score breakdown |
| data.compatibility_level | string | Textual compatibility band derived from score |
| data.doshas | object | Detected compatibility doshas |
| data.dosha_cancellations | object | Traditional dosha cancellation flags |
| data.analysis | object | Additional high-level matchmaking analysis details |
| data.classical_vetoes | object | null | Classical veto checks (Vedha, Rajju) and veto status |
| data.mangal_compatibility | object | null | Mangal Dosha compatibility assessment between both partners |
| data.supplementary_checks | object | null | Supplementary classical checks: Mahendra, Vedha, Rajju |
| data.compatibility_narrative | object | null | Narrative compatibility summary with strengths and concerns |
| data.birth_time_provided | boolean | Whether a precise birth time was provided for both persons. False when either person's birth time was not supplied or treated as unknown. |
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 |