Matchmaking (Milan)
GET
2 credits

/v1/milan/ashtakoota

Full 36-point Ashtakoota with per-koota breakdown.

What this tells you

"Guna Milan" or "Ashtakoota" is the classical 8-factor marriage compatibility system. Each factor (koota) measures a different dimension — from biological to spiritual. Maximum 36 points total. 18+ minimum is traditionally required; 28+ indicates good match; 32+ excellent. Nadi is heavily weighted because "same Nadi" is considered a progeny/health risk.

Request

All requests require an Authorization header with your dv_live_* API key.

example request
curl "https://api.divyastroapi.com/v1/milan/ashtakoota?date=2026-04-19&time=06%3A30&tz=%2B05%3A30&lat=28.61&lon=77.21" \
  -H "Authorization: Bearer dv_live_0123456789abcdef0123456789abcdef"

Response (200 OK)

Successful requests return a JSON body. Field names are stable across versions.

200 response
{
  "total": 28.5,
  "max": 36,
  "verdict": "good",
  "verdict_label": "Very Good — marriage recommended",
  "min_required": 18,
  "kootas": {
    "varna":        { "boy": "Brahmin",    "girl": "Brahmin",    "score": 1,   "max": 1,  "description": "Varna (spiritual compatibility)" },
    "vashya":       { "boy": "Chatushpada","girl": "Manava",     "score": 2,   "max": 2,  "description": "Vashya (mutual control)" },
    "tara":         { "tara_count": 3,     "score": 3,           "max": 3,     "description": "Tara (destiny/health compatibility)" },
    "yoni":         { "boy": "Deer (M)",   "girl": "Deer (F)",   "score": 3,   "max": 4,  "description": "Yoni (sexual/biological compatibility)" },
    "graha_maitri": { "boy_lord": "Mars",  "girl_lord": "Venus", "score": 5,   "max": 5,  "description": "Graha Maitri (mental/intellectual compatibility)" },
    "gana":         { "boy": "Deva",       "girl": "Manushya",   "score": 5,   "max": 6,  "description": "Gana (temperament)" },
    "bhakoot":      { "boy_sign": "Taurus","girl_sign": "Leo",   "score": 7,   "max": 7,  "description": "Bhakoot (financial/family stability)" },
    "nadi":         { "boy": "Aadi",       "girl": "Madhya",     "score": 2.5, "max": 8,  "description": "Nadi (progeny/health — most critical)" }
  }
}

Field reference

Every field in the response, with its type, a real example, and what it means.

FieldTypeMeaning
totalnumber (0–36)
Total compatibility score.
example: 28.5
Jyotish: Classical verdicts: 0–17 very poor (avoid), 18–24 acceptable, 25–32 good, 33–36 excellent.
maxinteger
Maximum possible score. Always 36.
example: 36
verdictstring
One of: very_poor, poor, acceptable, good, very_good, excellent.
example: "good"
verdict_labelstring
Human-readable version for UI.
example: "Very Good — marriage recommended"
min_requiredinteger
Classical minimum to proceed. Below this, marriage is traditionally discouraged.
example: 18
kootas.varnaobject
Varna compatibility (1 point). Boy's varna must be >= girl's for the point.
example:
kootas.vashyaobject
Vashya (2 points). Based on which "group" each sign belongs to.
example:
kootas.taraobject
Tara (3 points). Based on the nakshatra count between partners.
example:
kootas.yoniobject
Yoni (4 points). 14 animal types per nakshatra. Same yoni + compatible pairs score higher.
example:
kootas.graha_maitriobject
Graha Maitri (5 points). Friendship between Moon-sign lords.
example:
kootas.ganaobject
Gana (6 points). Deva-Deva or Manushya-Manushya ideal.
example:
kootas.bhakootobject
Bhakoot (7 points). Sign distance between partners.
example:
kootas.nadiobject
Nadi (8 points). Same nadi = major red flag in classical astrology.
example:

Usage tips

How to use it

  • Parameter pattern
    Pass both partners' birth data with `boy_*` and `girl_*` prefixes. All 8 kootas are computed from Moon's nakshatra for each.
  • Show the nadi carefully
    Nadi = 0/8 (same nadi) is a classical red flag but has many cancellation rules. Include a "consult an astrologer" link when this happens.
  • Render per-koota
    A 2-column table listing each koota, score/max, and one-line explanation works well. Color-code scores: red (<50%), yellow (50–75%), green (>75%).

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://divyastroapi.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 500 free credits. Sign up.