Aṣṭakūṭa (Guṇa Milan), 36 points
- Cost
- 10 units
- Operation
- compatibilityAshtakoota
- Auth
- X-API-Key
The eight kūṭas and the composite score. 10 units.
Read provenance before you present this to a user. Two of the eight tables are
verified against primary sources: Graha Maitrī matches Bṛhat Parāśara Horā Śāstra
Ch. 3 śl. 55 on all seven planets, and Nāḍī follows the boustrophedon formula rather than
a transcribed table. The yoni grid is disputed between published sources and the
response says so per-kūṭa rather than presenting a contested number as settled.
Worth knowing: the 36-point system is not in BPHS. It comes from the Muhūrta literature; BPHS supplies only the friendship table that Graha Maitrī consumes. Sources attributing the system itself to BPHS are mistaken.
Body parameters#
Local clock time at the place of birth. If unknown, omit it — we use 12:00
noon and set meta.birth_time_assumed, and still return the full chart. We do
not refuse a reading for want of a birth time.
min -90 · max 90.
min -180 · max 180.
IANA name, e.g. Asia/Kolkata. Not a fixed offset — an offset cannot represent
historical daylight-saving transitions, and a birth in 1980 may need one.
Honoured only where the operation exists in that school — 41 of them do. Everything
else is Lahiri-only and returns 501 for another school. See
GET /v1/meta/capabilities.
One of lahiri, raman, yukteswar, bhasin, true_chitra, kp. Defaults to "lahiri".
Local clock time at the place of birth. If unknown, omit it — we use 12:00
noon and set meta.birth_time_assumed, and still return the full chart. We do
not refuse a reading for want of a birth time.
min -90 · max 90.
min -180 · max 180.
IANA name, e.g. Asia/Kolkata. Not a fixed offset — an offset cannot represent
historical daylight-saving transitions, and a birth in 1980 may need one.
Honoured only where the operation exists in that school — 41 of them do. Everything
else is Lahiri-only and returns 501 for another school. See
GET /v1/meta/capabilities.
One of lahiri, raman, yukteswar, bhasin, true_chitra, kp. Defaults to "lahiri".
How Bhakūṭa doṣa cancellation is applied. Under lenient — same lord or
a friendly relationship on either side — Nava-Pañcama (5–9) doṣa can never
arise, because all twelve pairs cancel. That is a defensible classical
position and a surprising one, so it is explicit rather than implied.
One of strict, lenient. Defaults to "strict".
Request#
curl -X POST https://api.grahvani.in/v1/compatibility/ashtakoota \
-H "X-API-Key: $GRAHVANI_KEY" \
-H "Content-Type: application/json" \
-d '{
"bride": {
"birth": {
"date": "1992-03-14",
"time": "14:20:00",
"place": {
"latitude": 17.385,
"longitude": 78.4867,
"timezone": "Asia/Kolkata"
}
}
},
"groom": {
"birth": {
"date": "1989-11-02",
"time": "07:45:00",
"place": {
"latitude": 19.076,
"longitude": 72.8777,
"timezone": "Asia/Kolkata"
}
}
},
"bhakoot_rule": "strict"
}'import os, requests
URL = "https://api.grahvani.in/v1/compatibility/ashtakoota"
HEADERS = {"X-API-Key": os.environ["GRAHVANI_KEY"]}
payload = {
"bride": {
"birth": {
"date": "1992-03-14",
"time": "14:20:00",
"place": {
"latitude": 17.385,
"longitude": 78.4867,
"timezone": "Asia/Kolkata"
}
}
},
"groom": {
"birth": {
"date": "1989-11-02",
"time": "07:45:00",
"place": {
"latitude": 19.076,
"longitude": 72.8777,
"timezone": "Asia/Kolkata"
}
}
},
"bhakoot_rule": "strict"
}
r = requests.post(URL, headers=HEADERS, json=payload, timeout=60)
r.raise_for_status()
data = r.json()
print(data["meta"]["units"], "units")const res = await fetch("https://api.grahvani.in/v1/compatibility/ashtakoota", {
method: "POST",
headers: {
"X-API-Key": process.env.GRAHVANI_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"bride": {
"birth": {
"date": "1992-03-14",
"time": "14:20:00",
"place": {
"latitude": 17.385,
"longitude": 78.4867,
"timezone": "Asia/Kolkata"
}
}
},
"groom": {
"birth": {
"date": "1989-11-02",
"time": "07:45:00",
"place": {
"latitude": 19.076,
"longitude": 72.8777,
"timezone": "Asia/Kolkata"
}
}
},
"bhakoot_rule": "strict"
}),
});
if (!res.ok) throw new Error((await res.json()).error.message);
const { data, meta } = await res.json();
console.log(meta.units, "units");<?php
$ch = curl_init("https://api.grahvani.in/v1/compatibility/ashtakoota");
$headers = ["X-API-Key: " . getenv("GRAHVANI_KEY")];
$headers[] = "Content-Type: application/json";
$payload = [
"bride" => [
"birth" => [
"date" => "1992-03-14",
"time" => "14:20:00",
"place" => [
"latitude" => 17.385,
"longitude" => 78.4867,
"timezone" => "Asia/Kolkata"
]
]
],
"groom" => [
"birth" => [
"date" => "1989-11-02",
"time" => "07:45:00",
"place" => [
"latitude" => 19.076,
"longitude" => 72.8777,
"timezone" => "Asia/Kolkata"
]
]
],
"bhakoot_rule" => "strict"
];
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = json_decode(curl_exec($ch), true);
echo $data["meta"]["units"] . " units";Response#
A real response from the production API, abbreviated where an array was long. Every success carries the same three keys — data, meta and, where we have something citable, provenance.
{
"data": {
"female": {
"birth_details": {
"ascendant": {
"longitude": 94.125071,
"nakshatra": 8,
"nakshatra_name": "Pushya",
"pada": 1,
"rashi": 4,
"rashi_name": "Cancer"
},
"moon": {
"longitude": 89.906122,
"nakshatra": 7,
"nakshatra_name": "Punarvasu",
"pada": 3,
"rashi": 3,
"rashi_name": "Gemini"
}
},
"name": "api"
},
"guna_milan_results": {
"compatibility_level": "Poor",
"critical_doshas": [
"Nadi Dosha (Most serious - genetic incompatibility)",
"Bhakoot Dosha - 6-8 (Shadashtaka)",
"Gana Dosha (temperament mismatch)"
],
"kutas": {
"bhakoot": {
"description": "Love, affection and prosperity",
"dosha": "6-8 (Shadashtaka)",
"female_rashi": "Gemini",
"male_rashi": "Scorpio",
"max_points": 7,
"name": "Bhakoot Kuta",
"points_obtained": 0,
"position": 8
},
"gana": {
"description": "Temperament and behavior compatibility",
"female_gana": "Deva",
"male_gana": "Rakshasa",
"max_points": 6,
"name": "Gana Kuta",
"points_obtained": 0
},
"graha_maitri": {
"description": "Mental and psychological compatibility",
"female_rashi_lord": "Mercury",
"male_rashi_lord": "Mars",
"max_points": 5,
"name": "Graha Maitri Kuta",
"points_obtained": 0.5
},
"nadi": {
"description": "Health, genetics and progeny",
"exception_applied": false,
"female_nadi": "Aadi",
"male_nadi": "Aadi",
"max_points": 8,
"nadi_dosha": true,
"name": "Nadi Kuta",
"points_obtained": 0
},
"tara": {
"description": "Birth star compatibility and destiny",
"female_to_male_count": 12,
"female_to_male_tara": "Vipat",
"male_to_female_count": 17,
"male_to_female_tara": "Mitra",
"max_points": 3,
"name": "Tara Kuta",
"points_obtained": 1.5
},
"varna": {
"description": "Spiritual compatibility based on ego levels",
"female_varna": "Shudra",
"male_varna": "Brahmin",
"max_points": 1,
"name": "Varna Kuta",
"points_obtained": 1
},
"vashya": {
"description": "Mutual attraction and control",
"female_vashya": "Human",
"male_vashya": "Insect",
"max_points": 2,
"name": "Vashya Kuta",
"points_obtained": 0
},
"yoni": {
"description": "Physical and sexual compatibility",
"female_yoni": "Cat (F)",
"male_yoni": "Deer (M)",
"max_points": 4,
"name": "Yoni Kuta",
"points_obtained": 2
}
},
"max_score": 36,
"percentage": 13.89,
"recommendation": "Poor compatibility - Not recommended",
"total_score": 5
},
"male": {
"birth_details": {
"ascendant": {
"longitude": 209.917954,
"nakshatra": 16,
"nakshatra_name": "Vishakha",
"pada": 3,
"rashi": 7,
"rashi_name": "Libra"
},
"moon": {
"longitude": 233.804676,
"nakshatra": 18,
"nakshatra_name": "Jyeshtha",
"pada": 3,
"rashi": 8,
"rashi_name": "Scorpio"
}
},
"name": "api"
}
},
"meta": {
"request_id": "req_01JQ8ZK3M4N5P6Q7R8S9T",
"endpoint": "compatibility.ashtakoota",
"units": 10,
"computed_at": "2026-08-06T07:23:53.634Z",
"ayanamsa": "lahiri"
},
"provenance": {
"method": "Aṣṭakūṭa (Guṇa Milan), 36 points",
"conventions": {
"bhakoot": "strict cancellation unless bhakoot_rule=lenient"
},
"sources": [
{
"work": "Bṛhat Parāśara Horā Śāstra",
"locus": "Ch. 3, śl. 55",
"note": "the planetary friendship table Graha Maitrī consumes — verified 7/7"
}
],
"disputed": [
{
"element": "yoni kūṭa grid",
"note": "Published sources disagree on 10–18 of 91 animal pairs. The circulating 14×14 grid traces to a 2008 HTML-to-PDF e-text, and Raman's 1948 first edition contains no such grid. The 7 mortal-enemy pairs and the 0–4 scale are not in dispute."
},
{
"element": "the 36-point system itself",
"note": "Not from BPHS — it comes from the Muhūrta literature. BPHS supplies only the friendship table. Sources attributing the system to BPHS are mistaken."
}
]
}
}Errors#
| Status | When |
|---|---|
400 | Your request. Always carries error.field when a single input is at fault. |
401 | Missing, malformed, revoked or out-of-scope API key. |
429 | Rate limit or monthly unit quota exhausted. Always carries Retry-After. |
Every failure returns the same error shape and a doc_url that resolves. See Errors and the full code list.
https://api.grahvani.in