API Reference / Vedic Astrology / Matchmaking (Milan)
/v1/milan/ashtakoota
Full 36-point Ashtakoota with the total score and all 8 kootas in one call.
What this tells you
"Guna Milan" or "Ashtakoota" is the classical 8-factor marriage compatibility system. Each koota compares one aspect of the two charts, using each partner's Moon nakshatra and Moon sign. The maximum is 36 points. Traditionally 18 is the minimum for a match. Nadi carries the most points (8), so a Nadi Dosha can pull an otherwise strong match below the line. This endpoint returns the total, a verdict and all 8 kootas with details in one call.
Request
All requests require an Authorization header with your dv_live_* API key.
curl "https://api.lifeastroapi.com/v1/milan/ashtakoota?boy.date=1990-01-15&boy.tz=Asia%2FKolkata&girl.date=1992-03-20&girl.tz=Asia%2FKolkata&boy.time=10%3A30&girl.time=08%3A15" \
-H "Authorization: Bearer YOUR_API_KEY"Query parameters
Checked against the API: a parameter is marked required when the request fails without it.
| Name | Required | Example | Description |
|---|---|---|---|
boy.date | yes | 1990-01-15 | Boy's birth date (YYYY-MM-DD). |
boy.tz | yes | Asia/Kolkata | Boy's birth place timezone: IANA name (Asia/Kolkata) or UTC offset (+05:30). |
girl.date | yes | 1992-03-20 | Girl's birth date (YYYY-MM-DD). |
girl.tz | yes | Asia/Kolkata | Girl's birth place timezone: IANA name (Asia/Kolkata) or UTC offset (+05:30). |
boy.time | no | 10:30 | Boy's birth time (HH:MM, 24-hour, local). Defaults to 12:00. |
girl.time | no | 08:15 | Girl's birth time (HH:MM, 24-hour, local). Defaults to 12:00. |
person1.date | no | — | |
person1.time | no | — | |
person1.tz | no | — | |
person2.date | no | — | |
person2.time | no | — | |
person2.tz | no | — | |
ayanamsa | no | — | Ayanamsa (sidereal offset) to use. Defaults to lahiri. |
Response (200 OK)
The real response to the example request above, generated from the API itself. Long arrays are trimmed to their first two items. Field names are stable across versions.
{
"total": 9,
"max": 36,
"kootas": {
"bhakoot": {
"score": 0,
"max": 7,
"details": {
"distance": 2,
"dosha": true
}
},
"gana": {
"score": 0,
"max": 6,
"details": {
"boy": "Manushya",
"girl": "Rakshasa"
}
},
"graha_maitri": {
"score": 3,
"max": 5,
"details": {
"boy_lord": "Sun",
"girl_lord": "Mercury",
"relationship": "neutral"
}
},
"nadi": {
"score": 0,
"max": 8,
"details": {
"boy": "Madhya",
"dosha": true,
"girl": "Madhya"
}
},
"tara": {
"score": 3,
"max": 3,
"details": {
"cycle_position": 4,
"distance_nakshatras": 3
}
},
"varna": {
"score": 1,
"max": 1,
"details": {
"boy": "Kshatriya",
"girl": "Vaishya"
}
},
"vashya": {
"score": 0,
"max": 2,
"details": {
"boy": "Vanchar",
"girl": "Manushya"
}
},
"yoni": {
"score": 2,
"max": 4,
"details": {
"boy": "Mushaka",
"girl": "Vyaghra"
}
}
},
"verdict": "poor"
}Field reference
Every field in the response, with its type, a real example, and what it means.
| Field | Type | Meaning |
|---|---|---|
| total | number (0–36) | Sum of the 8 koota scores. Can end in .5, because Vashya can give 1.5. example: 9Jyotish: Traditionally 18 of 36 is the minimum for a match. |
| max | number | Maximum possible score. Always 36. example: 36 |
| verdict | string | poor (below 18), fair (18 to below 24), good (24 to below 29), excellent (29 and above). example: "poor" |
| kootas | object | One entry per koota, each with score, max and details. example: { bhakoot, gana, graha_maitri, nadi, tara, varna, vashya, yoni } |
| kootas.nadi.max | number | Maximum for that koota: varna 1, vashya 2, tara 3, yoni 4, graha_maitri 5, gana 6, bhakoot 7, nadi 8. example: 8 |
| kootas.varna.score | number (0 or 1) | 1 when the boy's varna ranks equal to or higher than the girl's, otherwise 0. example: 1 |
| kootas.varna.details | object | Varna of each partner's Moon sign: Brahmin, Kshatriya, Vaishya or Shudra. example: { "boy": "Kshatriya", "girl": "Vaishya" } |
| kootas.vashya.score | number (0–2) | 0, 1, 1.5 or 2 from the vashya table. example: 0 |
| kootas.vashya.details | object | Vashya class of each Moon sign: Chatushpada, Manushya, Jalchar, Vanchar or Keeta. example: { "boy": "Vanchar", "girl": "Manushya" } |
| kootas.tara.score | number (0 or 3) | 0 when cycle_position is 3, 5 or 7, otherwise 3. example: 3 |
| kootas.tara.details | object | distance_nakshatras: count from the boy's Moon nakshatra to the girl's (0–26). cycle_position: (distance mod 9) + 1, from 1 to 9. example: { "cycle_position": 4, "distance_nakshatras": 3 } |
| kootas.yoni.score | number (0–4) | Score from the yoni (animal) compatibility table. 4 for the same yoni. example: 2 |
| kootas.yoni.details | object | Yoni animal of each partner's Moon nakshatra. example: { "boy": "Mushaka", "girl": "Vyaghra" } |
| kootas.graha_maitri.score | number (1, 3 or 5) | friend 5, neutral 3, enemy 1. example: 3 |
| kootas.graha_maitri.details | object | Lord of each Moon sign and the natural relationship of the boy's lord toward the girl's: friend, neutral or enemy. The same lord counts as friend. example: { "boy_lord": "Sun", "girl_lord": "Mercury", "relationship": "neutral" } |
| kootas.gana.score | number (0, 5 or 6) | 6 for the same gana, 5 for Deva with Manushya, 0 for any pair with one Rakshasa. example: 0 |
| kootas.gana.details | object | Gana (temperament) of each partner: Deva, Manushya or Rakshasa. example: { "boy": "Manushya", "girl": "Rakshasa" } |
| kootas.bhakoot.score | number (0 or 7) | 0 when details.dosha is true, otherwise 7. example: 0 |
| kootas.bhakoot.details | object | distance: sign count from the boy's Moon sign to the girl's (1 = same sign, up to 12). dosha: true when that distance is a Bhakoot dosha. example: { "distance": 2, "dosha": true } |
| kootas.nadi.score | number (0 or 8) | 0 when details.dosha is true, otherwise 8. example: 0 |
| kootas.nadi.details | object | Nadi of each partner (Aadi, Madhya or Antya). dosha is true when both are the same, unless the nakshatra pair is a listed exception. example: { "boy": "Madhya", "dosha": true, "girl": "Madhya" } |
Usage tips
How to use it
- Score and full breakdown in 1 callThe total, the verdict and the per-koota details come back together, so a compatibility screen needs one request.
- Parameter patternPass each partner's birth data as boy.date, boy.time, boy.tz and girl.date, girl.time, girl.tz (time defaults to 12:00). Only the Moon position is used, so lat/lon are not read. Optional: ayanamsa.
- Show the nadi carefullyA nadi score of 0 (same nadi) is a classical red flag, but it has cancellation rules. Show /v1/milan/nadi-dosha for the detail and add a "consult an astrologer" link.
- Render per-kootaA 2-column table listing each koota, score/max and a one-line explanation works well. Color-code: red (<50%), yellow (50–75%), green (>75%).
- Only the total/v1/milan/ashtakoota/total returns just total, max and verdict.
- Localized namesPass `locale` (for example locale=hi) to get the boy, girl, boy_lord, girl_lord and relationship values localized. Keys and verdict stay in English.
Errors
Every error follows the same envelope. Use the error.code field (not the message) for conditional logic in your integration.
401 Unauthorized
{
"error": {
"code": "unauthorized",
"message": "missing or invalid API key",
"request_id": "req_01hqy7k8c3e7m1n"
}
}402 Payment Required
{
"error": {
"code": "trial_exhausted",
"message": "your free trial credits are exhausted — pick a plan to continue",
"top_up_url": "https://lifeastroapi.com/pricing",
"request_id": "req_01hqy7k8c3e7m1n"
}
}429 Too Many Requests
{
"error": {
"code": "rate_limited",
"message": "rate limit exceeded; retry after 12 seconds",
"request_id": "req_01hqy7k8c3e7m1n"
}
}Try it
Get a dv_live_* key from your dashboard and paste into the cURL snippet above. New accounts get 1,500 free credits. Sign up.