Skip to content

Matching

Ashtakoota (guna milan) scores a pair on eight kootas, all derived from each person’s Moon sign and nakshatra, for a total out of 36. Navapatra returns each koota’s points, what produced them and the Nadi, Bhakuta and Gana dosha flags, with labels in the language you ask for.

POST/v1/matching/ashtakoota1 creditReference

Each side is either birth input or a kundali payload the API returned earlier. Nothing is stored on our side, so there are no profile ids: send the data each time.

Terminal window
curl https://api.navapatra.com/v1/matching/ashtakoota \
-H "Authorization: Bearer $NAVAPATRA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"male": {
"type": "birth",
"birth": { "calendar": "AD", "date": "1990-05-15", "time": "10:30", "place": { "lat": 27.7172, "lng": 85.324 } }
},
"female": {
"type": "birth",
"birth": { "calendar": "BS", "date": "2050-05-12", "time": "14:35", "place": { "lat": 28.2096, "lng": 83.9856 } }
},
"lang": "en"
}'

Both of these births are demo samples, so the request also works with the demo key.

{ "type": "birth", "birth": { "...": "BirthInput" }, "options": { "ayanamsha": "lahiri", "nodeType": "mean" } }
{ "type": "kundali", "kundali": { "grahas": [ { "id": "moon", "longitude": 269.0004 } ] } }
  • type: "birth" takes the same birth object as /v1/kundali and the chart options (ayanamsha, nodeType, disambiguation, nepalHistoricOffset).
  • type: "kundali" takes a kundali you got from /v1/kundali or /v1/kundali/planets. Only the Moon’s longitude in grahas is read, so you can pass the whole response or just that entry. This is the cheap path for platforms that already hold computed charts. It is not available with the demo key.
{
"male": {
"rashi": { "index": 9, "name": "Dhanu" },
"nakshatra": { "index": 21, "name": "Uttara Ashadha" },
"moonLongitude": 269.7143
},
"female": {
"rashi": { "index": 9, "name": "Dhanu" },
"nakshatra": { "index": 21, "name": "Uttara Ashadha" },
"moonLongitude": 269.0004
},
"kootas": [
{
"id": "varna", "index": 1, "name": "Varna", "obtained": 1, "max": 1,
"detail": {
"male": { "id": "kshatriya", "index": 2, "name": "Kshatriya" },
"female": { "id": "kshatriya", "index": 2, "name": "Kshatriya" }
}
},
{
"id": "nadi", "index": 8, "name": "Nadi", "obtained": 0, "max": 8,
"detail": {
"male": { "id": "antya", "index": 3, "name": "Antya" },
"female": { "id": "antya", "index": 3, "name": "Antya" }
}
}
],
"total": 28,
"max": 36,
"percent": 77.78,
"dosha": { "nadi": true, "bhakuta": false, "gana": false },
"meta": {
"engineVersion": "0.1.0",
"apiVersion": "2026-11-01",
"ayanamsha": { "id": "lahiri", "degrees": 23.725755 },
"nodeType": "mean",
"tzdbVersion": "unknown",
"deltaTModelVersion": "iers-c01-2026.5+quad2100-v1",
"bsTableVersion": "2026.10.1",
"overridesVersion": null
}
}

kootas always has all eight, in this order:

id Max detail shows each person’s
varna 1 Varna
vashya 2 Vashya group
tara 3 Tara from the other’s nakshatra
yoni 4 Yoni animal
graha-maitri 5 Moon sign lord
gana 6 Gana (Deva, Manushya, Rakshasa)
bhakuta 7 Moon sign
nadi 8 Nadi (Adi, Madhya, Antya)

dosha flags the three classic doshas: nadi (same nadi), bhakuta (an unfavourable sign relationship) and gana. The example pair shares a nakshatra, so it scores well overall but has Nadi dosha. How you present doshas, and any cancellation rules your tradition applies, is up to you; the API reports the raw flags.

meta names the versions behind the score. Its ayanamsha and nodeType are those of the first subject computed from birth input (the male side first; here the 1990 birth, hence a slightly different ayanamsha value from the 1993 one). When both sides are kundali payloads, those two fields are left out, because each payload carries its own meta.

POST/v1/matching/ashtakoota/batch1 credit per pairReference

Send 1 to 100 pairs. Each can carry your own id (up to 64 characters), and results come back in the same order with the same ids, followed by one meta for the whole batch. The call costs one credit per pair.

{
"pairs": [
{ "id": "p1", "male": { "type": "birth", "birth": { "...": "..." } }, "female": { "type": "birth", "birth": { "...": "..." } } },
{ "id": "p2", "male": { "type": "kundali", "kundali": { "...": "..." } }, "female": { "type": "kundali", "kundali": { "...": "..." } } }
],
"lang": "en"
}
{
"results": [
{ "id": "p1", "total": 28, "max": 36, "percent": 77.78, "dosha": { "nadi": true, "bhakuta": false, "gana": false }, "...": "..." },
{ "id": "p2", "total": 13, "max": 36, "percent": 36.11, "dosha": { "nadi": true, "bhakuta": true, "gana": true }, "...": "..." }
],
"meta": { "engineVersion": "0.1.0", "apiVersion": "2026-11-01", "...": "..." }
}

If any pair is invalid the whole batch fails with 400 invalid_input (or 422 for a place or time problem) and nothing is charged. Error paths point at the pair, for example pairs.3.female.birth.date. Batch matching needs a real key; the demo key cannot call it.

POST/v1/matching/rashi1 creditReference

When you only know two Moon signs, score them on Graha Maitri (out of 5) and Bhakuta (out of 7), for 12 in all. The score is symmetric: (a, b) and (b, a) always match.

Terminal window
curl https://api.navapatra.com/v1/matching/rashi \
-H "Authorization: Bearer $NAVAPATRA_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "a": 3, "b": 9, "lang": "en" }'
{
"a": { "index": 3, "name": "Mithuna" },
"b": { "index": 9, "name": "Dhanu" },
"grahaMaitri": { "obtained": 0.5, "max": 5 },
"bhakuta": { "obtained": 7, "max": 7 },
"total": 7.5,
"max": 12,
"percent": 62.5,
"meta": {
"engineVersion": "0.1.0",
"apiVersion": "2026-11-01",
"tzdbVersion": "unknown",
"deltaTModelVersion": "iers-c01-2026.5+quad2100-v1",
"bsTableVersion": "2026.10.1",
"overridesVersion": null
}
}

Signs are indexes 1 (Mesha) to 12 (Meena).