Matchmaking
Ashtakoot Guna Milan and Manglik compatibility for two people.
Ashtakoot Guna Milan (36 points)
POST/v1/match/ashtakoot
1 credit · Secret key (test or live) · getAshtakoot · Page for this operation
Request body
person_aBirth requireddatestring (date) requirede.g.
"1990-08-13"timestringpattern
^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$· e.g."06:30"time_accuracystringWith "unknown", lagna- and house-dependent fields are omitted and listed in warnings — never filled with a noon default.
one of
exact,approximate,unknown· default"exact"placeCoordinates or object or object requiredCoordinates, a place_id from /v1/places/search, or a free-text query. A vague query returns 422 place_ambiguous with candidates; the API never guesses.
One of:
- Coordinates
Fields
latitudenumber required≥ -90 · ≤ 90
longitudenumber required≥ -180 · ≤ 180
No other fields are accepted.
- object
Fields
place_idstring required
No other fields are accepted.
- object
Fields
querystring requiredat least 2 characters · at most 120 characters
No other fields are accepted.
- Coordinates
timezonestring"auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".
default
"auto"
No other fields are accepted.
person_bBirth requireddatestring (date) requirede.g.
"1990-08-13"timestringpattern
^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$· e.g."06:30"time_accuracystringWith "unknown", lagna- and house-dependent fields are omitted and listed in warnings — never filled with a noon default.
one of
exact,approximate,unknown· default"exact"placeCoordinates or object or object requiredCoordinates, a place_id from /v1/places/search, or a free-text query. A vague query returns 422 place_ambiguous with candidates; the API never guesses.
One of:
- Coordinates
Fields
latitudenumber required≥ -90 · ≤ 90
longitudenumber required≥ -180 · ≤ 180
No other fields are accepted.
- object
Fields
place_idstring required
No other fields are accepted.
- object
Fields
querystring requiredat least 2 characters · at most 120 characters
No other fields are accepted.
- Coordinates
timezonestring"auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".
default
"auto"
No other fields are accepted.
optionsOptionsayanamsastringEach system is its Swiss Ephemeris definition (a constant offset from Lahiri). Applies to chart operations; KP operations always use KP-New and the personal muhurat stays Lahiri. meta.ayanamsa names the system used.
one of
lahiri,raman,krishnamurti,yukteshwar,fagan_bradley· default"lahiri"house_systemstringone of
whole_sign· default"whole_sign"nodestringThe Rahu/Ketu the chart uses: the true (osculating) node, as Swiss Ephemeris and Drik Panchang define it, or the mean node. meta.node names the one used. POST /v1/planets/positions always returns both.
one of
true,mean· default"true"langstringone of
en,hi· default"en"viewstringcompact drops labels and prose — for LLM callers.
one of
full,compact· default"full"tonestringdescriptive: the prose fields (tithi.note, tara descriptions, the timing summary and insights, natal-transit descriptions, transit-event notes) carry reviewed descriptive sentences, attributed to the tradition and with no instructions, in options.lang. Ids, scores and every other value are unchanged. Applies to getPanchang, getFavourableDays, getPersonalTiming, getDashaTransitConfluence, getNatalTransits and listPlanetaryEvents (and those inside a bundle); elsewhere it changes nothing.
one of
default,descriptive· default"default"dasha_yearnumberDays in a Vimshottari year: 365.25 (Julian, the default), 365.2422 (tropical) or 360 (savana). Applies to /v1/dasha/vimshottari and /v1/dasha/vimshottari/current; data.basis.year_days names the one used.
one of
365.25,365.2422,360· default365.25
No other fields are accepted.
No other fields are accepted.
Response
JSON { data, meta, warnings }, where data is:
totalnumber required≥ 0 · ≤ 36
max36 requiredconclusionstring requiredkootasarray of object requirednamestring requiredlabelstring requiredscorenumber requiredmaxnumber requirednotestring required
doshasobject requirednadiboolean requiredbhakootboolean required
person_aMoonProfile requiredrashistring requirednakshatrastring requiredganastring requirednadistring requiredyonistring required
person_bMoonProfile requiredrashistring requirednakshatrastring requiredganastring requirednadistring requiredyonistring required
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl -X POST 'https://api.astrologics.in/v1/match/ashtakoot' \
-H 'Authorization: Bearer al_test_YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"person_a":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"person_b":{"date":"1992-03-02","time":"14:10","place":{"latitude":19.076,"longitude":72.8777}}}'
Node.js
const res = await fetch("https://api.astrologics.in/v1/match/ashtakoot", {
method: "POST",
headers: { Authorization: "Bearer al_test_YOUR_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"person_a": {
"date": "1990-08-13",
"time": "06:30",
"place": {
"latitude": 28.6139,
"longitude": 77.209
}
},
"person_b": {
"date": "1992-03-02",
"time": "14:10",
"place": {
"latitude": 19.076,
"longitude": 72.8777
}
}
}),
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
body = {
"person_a": {
"date": "1990-08-13",
"time": "06:30",
"place": {
"latitude": 28.6139,
"longitude": 77.209,
},
},
"person_b": {
"date": "1992-03-02",
"time": "14:10",
"place": {
"latitude": 19.076,
"longitude": 72.8777,
},
},
}
req = urllib.request.Request(
"https://api.astrologics.in/v1/match/ashtakoot",
method="POST",
headers={"Authorization": "Bearer al_test_YOUR_KEY", "Content-Type": "application/json"},
data=json.dumps(body).encode(),
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/match/ashtakoot');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"person_a":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"person_b":{"date":"1992-03-02","time":"14:10","place":{"latitude":19.076,"longitude":72.8777}}}',
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 1,920 characters
{
"data": {
"total": 10.5,
"max": 36,
"conclusion": "Below recommended - consult an astrologer",
"kootas": [
{
"name": "varna",
"label": "Varna",
"score": 1,
"max": 1,
"note": "Kshatriya / Vaishya"
},
{
"name": "vashya",
"label": "Vashya",
"score": 0.5,
"max": 2,
"note": "Chatushpada / Jalachara"
},
{
"name": "tara_dina",
"label": "Tara / Dina",
"score": 1.5,
"max": 3,
"note": "Star compatibility"
},
{
"name": "yoni",
"label": "Yoni",
"score": 0,
"max": 4,
"note": "Elephant / Lion"
},
{
"name": "graha_maitri",
"label": "Graha Maitri",
"score": 0.5,
"max": 5,
"note": "Mars / Saturn"
},
{
"name": "gana",
"label": "Gana",
"score": 0,
"max": 6,
"note": "Manushya / Rakshasa"
},
{
"name": "bhakoot",
"label": "Bhakoot",
"score": 7,
"max": 7,
"note": "Rasi 4-10 (ok)"
},
{
"name": "nadi",
"label": "Nadi",
"score": 0,
"max": 8,
"note": "Madhya (Pitta) / Madhya (Pitta) (Nadi dosha)"
}
],
"doshas": {
"nadi": true,
"bhakoot": false
},
"person_a": {
"rashi": "aries",
"nakshatra": "bharani",
"gana": "manushya",
"nadi": "madhya_pitta",
"yoni": "elephant"
},
"person_b": {
"rashi": "capricorn",
"nakshatra": "dhanishta",
"gana": "rakshasa",
"nadi": "madhya_pitta",
"yoni": "lion"
}
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.10.10",
"mode": "live",
"credits_charged": 1,
"ayanamsa": "lahiri"
},
"warnings": []
}Try it
The ten South Indian poruthams, from the Moon stars: each result, a score, and Rajju called out
POST/v1/match/dashakoot
1 credit · Secret key (test or live) · getDashakoot · Page for this operation
person_a is the groom and person_b the bride: counts run from her star to his. Regional almanacs differ, so everything is labelled convention, and you set minimum_agreeing.
Request body
person_aBirth requireddatestring (date) requirede.g.
"1990-08-13"timestringpattern
^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$· e.g."06:30"time_accuracystringWith "unknown", lagna- and house-dependent fields are omitted and listed in warnings — never filled with a noon default.
one of
exact,approximate,unknown· default"exact"placeCoordinates or object or object requiredCoordinates, a place_id from /v1/places/search, or a free-text query. A vague query returns 422 place_ambiguous with candidates; the API never guesses.
One of:
- Coordinates
Fields
latitudenumber required≥ -90 · ≤ 90
longitudenumber required≥ -180 · ≤ 180
No other fields are accepted.
- object
Fields
place_idstring required
No other fields are accepted.
- object
Fields
querystring requiredat least 2 characters · at most 120 characters
No other fields are accepted.
- Coordinates
timezonestring"auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".
default
"auto"
No other fields are accepted.
person_bBirth requireddatestring (date) requirede.g.
"1990-08-13"timestringpattern
^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$· e.g."06:30"time_accuracystringWith "unknown", lagna- and house-dependent fields are omitted and listed in warnings — never filled with a noon default.
one of
exact,approximate,unknown· default"exact"placeCoordinates or object or object requiredCoordinates, a place_id from /v1/places/search, or a free-text query. A vague query returns 422 place_ambiguous with candidates; the API never guesses.
One of:
- Coordinates
Fields
latitudenumber required≥ -90 · ≤ 90
longitudenumber required≥ -180 · ≤ 180
No other fields are accepted.
- object
Fields
place_idstring required
No other fields are accepted.
- object
Fields
querystring requiredat least 2 characters · at most 120 characters
No other fields are accepted.
- Coordinates
timezonestring"auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".
default
"auto"
No other fields are accepted.
optionsOptionsayanamsastringEach system is its Swiss Ephemeris definition (a constant offset from Lahiri). Applies to chart operations; KP operations always use KP-New and the personal muhurat stays Lahiri. meta.ayanamsa names the system used.
one of
lahiri,raman,krishnamurti,yukteshwar,fagan_bradley· default"lahiri"house_systemstringone of
whole_sign· default"whole_sign"nodestringThe Rahu/Ketu the chart uses: the true (osculating) node, as Swiss Ephemeris and Drik Panchang define it, or the mean node. meta.node names the one used. POST /v1/planets/positions always returns both.
one of
true,mean· default"true"langstringone of
en,hi· default"en"viewstringcompact drops labels and prose — for LLM callers.
one of
full,compact· default"full"tonestringdescriptive: the prose fields (tithi.note, tara descriptions, the timing summary and insights, natal-transit descriptions, transit-event notes) carry reviewed descriptive sentences, attributed to the tradition and with no instructions, in options.lang. Ids, scores and every other value are unchanged. Applies to getPanchang, getFavourableDays, getPersonalTiming, getDashaTransitConfluence, getNatalTransits and listPlanetaryEvents (and those inside a bundle); elsewhere it changes nothing.
one of
default,descriptive· default"default"dasha_yearnumberDays in a Vimshottari year: 365.25 (Julian, the default), 365.2422 (tropical) or 360 (savana). Applies to /v1/dasha/vimshottari and /v1/dasha/vimshottari/current; data.basis.year_days names the one used.
one of
365.25,365.2422,360· default365.25
No other fields are accepted.
minimum_agreeingintegerSources name 5, 6 or 7. Rajju must agree as well.
≥ 1 · ≤ 10 · default
5
No other fields are accepted.
Response
JSON { data, meta, warnings }, where data is:
poruthamsarray of object requiredidstring requiredone of
dina,gana,mahendra,stree_deergha,yoni,rasi,rasi_adhipati,vashya,rajju,vedhalabelstring requiredresultstring requiredone of
agrees,moderate,does_not_agreescorenumber required1, 0.5 or 0.
groomstring requiredbridestring requiredcountinteger or null requiredOne of:
- integer
- null
agreeinginteger requiredmoderateinteger requirednot_agreeinginteger requiredscorenumber requiredmaxinteger requiredrajju_agreesboolean requiredvedha_agreesboolean requiredminimum_agreeinginteger requiredmeets_minimumboolean requiredRajju agrees, and at least minimum_agreeing poruthams agree.
sourceobject requiredbasisstring requiredone of
conventiontextstring required
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl -X POST 'https://api.astrologics.in/v1/match/dashakoot' \
-H 'Authorization: Bearer al_test_YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"person_a":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"person_b":{"date":"1992-03-02","time":"14:10","place":{"latitude":19.076,"longitude":72.8777}}}'
Node.js
const res = await fetch("https://api.astrologics.in/v1/match/dashakoot", {
method: "POST",
headers: { Authorization: "Bearer al_test_YOUR_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"person_a": {
"date": "1990-08-13",
"time": "06:30",
"place": {
"latitude": 28.6139,
"longitude": 77.209
}
},
"person_b": {
"date": "1992-03-02",
"time": "14:10",
"place": {
"latitude": 19.076,
"longitude": 72.8777
}
}
}),
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
body = {
"person_a": {
"date": "1990-08-13",
"time": "06:30",
"place": {
"latitude": 28.6139,
"longitude": 77.209,
},
},
"person_b": {
"date": "1992-03-02",
"time": "14:10",
"place": {
"latitude": 19.076,
"longitude": 72.8777,
},
},
}
req = urllib.request.Request(
"https://api.astrologics.in/v1/match/dashakoot",
method="POST",
headers={"Authorization": "Bearer al_test_YOUR_KEY", "Content-Type": "application/json"},
data=json.dumps(body).encode(),
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/match/dashakoot');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"person_a":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"person_b":{"date":"1992-03-02","time":"14:10","place":{"latitude":19.076,"longitude":72.8777}}}',
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 2,607 characters
{
"data": {
"poruthams": [
{
"id": "dina",
"result": "does_not_agree",
"groom": "Bharani",
"bride": "Dhanishta",
"count": 7,
"label": "Dina",
"score": 0
},
{
"id": "gana",
"result": "does_not_agree",
"groom": "Manushya",
"bride": "Rakshasa",
"count": null,
"label": "Gana",
"score": 0
},
{
"id": "mahendra",
"result": "agrees",
"groom": "Bharani",
"bride": "Dhanishta",
"count": 7,
"label": "Mahendra",
"score": 1
},
{
"id": "stree_deergha",
"result": "does_not_agree",
"groom": "Bharani",
"bride": "Dhanishta",
"count": 7,
"label": "Stree Deergha",
"score": 0
},
{
"id": "yoni",
"result": "does_not_agree",
"groom": "Elephant",
"bride": "Lion",
"count": null,
"label": "Yoni",
"score": 0
},
{
"id": "rasi",
"result": "does_not_agree",
"groom": "Aries",
"bride": "Capricorn",
"count": 4,
"label": "Rasi",
"score": 0
},
{
"id": "rasi_adhipati",
"result": "moderate",
"groom": "Mars",
"bride": "Saturn",
"count": null,
"label": "Rasi Adhipati",
"score": 0.5
},
{
"id": "vashya",
"result": "does_not_agree",
"groom": "Chatushpada",
"bride": "Jalachara",
"count": null,
"label": "Vashya",
"score": 0
},
{
"id": "rajju",
"result": "agrees",
"groom": "kati",
"bride": "siro",
"count": null,
"label": "Rajju",
"score": 1
},
{
"id": "vedha",
"result": "agrees",
"groom": "Bharani",
"bride": "Dhanishta",
"count": null,
"label": "Vedha",
"score": 1
}
],
"agreeing": 3,
"moderate": 1,
"not_agreeing": 6,
"score": 3.5,
"max": 10,
"rajju_agrees": true,
"vedha_agrees": true,
"minimum_agreeing": 5,
"meets_minimum": false,
"source": {
"basis": "convention",
"text": "Common South Indian practice, which varies by region. Not a prediction or advice on whom to marry."
}
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.10.10",
"mode": "live",
"credits_charged": 1,
"ayanamsa": "lahiri"
},
"warnings": []
}Try it
Papasamyam: malefics from lagna, Moon and Venus in both charts, compared
POST/v1/match/papasamyam
2 credits · Secret key (test or live) · getPapasamyam · Page for this operation
person_a is the groom and person_b the bride. Needs both birth times. Sources agree on the method and differ on the points, so choose count or weighted; totals are not comparable between them.
Request body
person_aBirth requireddatestring (date) requirede.g.
"1990-08-13"timestringpattern
^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$· e.g."06:30"time_accuracystringWith "unknown", lagna- and house-dependent fields are omitted and listed in warnings — never filled with a noon default.
one of
exact,approximate,unknown· default"exact"placeCoordinates or object or object requiredCoordinates, a place_id from /v1/places/search, or a free-text query. A vague query returns 422 place_ambiguous with candidates; the API never guesses.
One of:
- Coordinates
Fields
latitudenumber required≥ -90 · ≤ 90
longitudenumber required≥ -180 · ≤ 180
No other fields are accepted.
- object
Fields
place_idstring required
No other fields are accepted.
- object
Fields
querystring requiredat least 2 characters · at most 120 characters
No other fields are accepted.
- Coordinates
timezonestring"auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".
default
"auto"
No other fields are accepted.
person_bBirth requireddatestring (date) requirede.g.
"1990-08-13"timestringpattern
^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$· e.g."06:30"time_accuracystringWith "unknown", lagna- and house-dependent fields are omitted and listed in warnings — never filled with a noon default.
one of
exact,approximate,unknown· default"exact"placeCoordinates or object or object requiredCoordinates, a place_id from /v1/places/search, or a free-text query. A vague query returns 422 place_ambiguous with candidates; the API never guesses.
One of:
- Coordinates
Fields
latitudenumber required≥ -90 · ≤ 90
longitudenumber required≥ -180 · ≤ 180
No other fields are accepted.
- object
Fields
place_idstring required
No other fields are accepted.
- object
Fields
querystring requiredat least 2 characters · at most 120 characters
No other fields are accepted.
- Coordinates
timezonestring"auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".
default
"auto"
No other fields are accepted.
optionsOptionsayanamsastringEach system is its Swiss Ephemeris definition (a constant offset from Lahiri). Applies to chart operations; KP operations always use KP-New and the personal muhurat stays Lahiri. meta.ayanamsa names the system used.
one of
lahiri,raman,krishnamurti,yukteshwar,fagan_bradley· default"lahiri"house_systemstringone of
whole_sign· default"whole_sign"nodestringThe Rahu/Ketu the chart uses: the true (osculating) node, as Swiss Ephemeris and Drik Panchang define it, or the mean node. meta.node names the one used. POST /v1/planets/positions always returns both.
one of
true,mean· default"true"langstringone of
en,hi· default"en"viewstringcompact drops labels and prose — for LLM callers.
one of
full,compact· default"full"tonestringdescriptive: the prose fields (tithi.note, tara descriptions, the timing summary and insights, natal-transit descriptions, transit-event notes) carry reviewed descriptive sentences, attributed to the tradition and with no instructions, in options.lang. Ids, scores and every other value are unchanged. Applies to getPanchang, getFavourableDays, getPersonalTiming, getDashaTransitConfluence, getNatalTransits and listPlanetaryEvents (and those inside a bundle); elsewhere it changes nothing.
one of
default,descriptive· default"default"dasha_yearnumberDays in a Vimshottari year: 365.25 (Julian, the default), 365.2422 (tropical) or 360 (savana). Applies to /v1/dasha/vimshottari and /v1/dasha/vimshottari/current; data.basis.year_days names the one used.
one of
365.25,365.2422,360· default365.25
No other fields are accepted.
methodstringone of
count,weighted· default"count"include_ketubooleanSources differ on Ketu. Only with method count.
default
false
No other fields are accepted.
Response
JSON { data, meta, warnings }, where data is:
methodstring requiredone of
count,weightedinclude_ketuboolean requiredgroomPapaChart requiredtotalnumber requiredrowsarray of object requiredFields
planetstring requiredreferencestring requiredone of
lagna,moon,venushouseinteger required≥ 1 · ≤ 12
countedboolean requiredIn house 1, 2, 4, 7, 8 or 12 from the reference.
dignitystring or null requiredOne of:
- string
- null
pointsnumber required
bridePapaChart requiredtotalnumber requiredrowsarray of object requiredFields
planetstring requiredreferencestring requiredone of
lagna,moon,venushouseinteger required≥ 1 · ≤ 12
countedboolean requiredIn house 1, 2, 4, 7, 8 or 12 from the reference.
dignitystring or null requiredOne of:
- string
- null
pointsnumber required
resultstring requiredone of
satisfactory,not_satisfactorytextstring requiredratio_groom_to_bridenumber or null requiredOne of:
- number
- null
sourceobject requiredbasisstring requiredone of
conventiontextstring required
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl -X POST 'https://api.astrologics.in/v1/match/papasamyam' \
-H 'Authorization: Bearer al_test_YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"person_a":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"person_b":{"date":"1992-03-02","time":"14:10","place":{"latitude":19.076,"longitude":72.8777}},"method":"count"}'
Node.js
const res = await fetch("https://api.astrologics.in/v1/match/papasamyam", {
method: "POST",
headers: { Authorization: "Bearer al_test_YOUR_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"person_a": {
"date": "1990-08-13",
"time": "06:30",
"place": {
"latitude": 28.6139,
"longitude": 77.209
}
},
"person_b": {
"date": "1992-03-02",
"time": "14:10",
"place": {
"latitude": 19.076,
"longitude": 72.8777
}
},
"method": "count"
}),
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
body = {
"person_a": {
"date": "1990-08-13",
"time": "06:30",
"place": {
"latitude": 28.6139,
"longitude": 77.209,
},
},
"person_b": {
"date": "1992-03-02",
"time": "14:10",
"place": {
"latitude": 19.076,
"longitude": 72.8777,
},
},
"method": "count",
}
req = urllib.request.Request(
"https://api.astrologics.in/v1/match/papasamyam",
method="POST",
headers={"Authorization": "Bearer al_test_YOUR_KEY", "Content-Type": "application/json"},
data=json.dumps(body).encode(),
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/match/papasamyam');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"person_a":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"person_b":{"date":"1992-03-02","time":"14:10","place":{"latitude":19.076,"longitude":72.8777}},"method":"count"}',
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 5,098 characters
{
"data": {
"method": "count",
"include_ketu": false,
"groom": {
"total": 5,
"rows": [
{
"planet": "Sun",
"reference": "lagna",
"house": 12,
"counted": true,
"dignity": null,
"points": 1
},
{
"planet": "Sun",
"reference": "moon",
"house": 4,
"counted": true,
"dignity": null,
"points": 1
},
{
"planet": "Sun",
"reference": "venus",
"house": 1,
"counted": true,
"dignity": null,
"points": 1
},
{
"planet": "Mars",
"reference": "lagna",
"house": 9,
"counted": false,
"dignity": null,
"points": 0
},
{
"planet": "Mars",
"reference": "moon",
"house": 1,
"counted": true,
"dignity": null,
"points": 1
},
{
"planet": "Mars",
"reference": "venus",
"house": 10,
"counted": false,
"dignity": null,
"points": 0
},
{
"planet": "Saturn",
"reference": "lagna",
"house": 5,
"counted": false,
"dignity": null,
"points": 0
},
{
"planet": "Saturn",
"reference": "moon",
"house": 9,
"counted": false,
"dignity": null,
"points": 0
},
{
"planet": "Saturn",
"reference": "venus",
"house": 6,
"counted": false,
"dignity": null,
"points": 0
},
{
"planet": "Rahu",
"reference": "lagna",
"house": 6,
"counted": false,
"dignity": null,
"points": 0
},
{
"planet": "Rahu",
"reference": "moon",
"house": 10,
"counted": false,
"dignity": null,
"points": 0
},
{
"planet": "Rahu",
"reference": "venus",
"house": 7,
"counted": true,
"dignity": null,
"points": 1
}
]
},
"bride": {
"total": 11,
"rows": [
{
"planet": "Sun",
"reference": "lagna",
"house": 9,
"counted": false,
"dignity": null,
"points": 0
},
{
"planet": "Sun",
"reference": "moon",
"house": 2,
"counted": true,
"dignity": null,
"points": 1
},
{
"planet": "Sun",
"reference": "venus",
"house": 2,
"counted": true,
"dignity": null,
"points": 1
},
{
"planet": "Mars",
"reference": "lagna",
"house": 8,
"counted": true,
"dignity": null,
"points": 1
},
{
"planet": "Mars",
"reference": "moon",
"house": 1,
"counted": true,
"dignity": null,
"points": 1
},
{
"planet": "Mars",
"reference": "venus",
"house": 1,
"counted": true,
"dignity": null,
"points": 1
},
{
"planet": "Saturn",
"reference": "lagna",
"house": 8,
"counted": true,
"dignity": null,
"points": 1
},
{
"planet": "Saturn",
"reference": "moon",
"house": 1,
"counted": true,
"dignity": null,
"points": 1
},
{
"planet": "Saturn",
"reference": "venus",
"house": 1,
"counted": true,
"dignity": null,
"points": 1
},
{
"planet": "Rahu",
"reference": "lagna",
"house": 7,
"counted": true,
"dignity": null,
"points": 1
},
{
"planet": "Rahu",
"reference": "moon",
"house": 12,
"counted": true,
"dignity": null,
"points": 1
},
{
"planet": "Rahu",
"reference": "venus",
"house": 12,
"counted": true,
"dignity": null,
"points": 1
}
]
},
"result": "not_satisfactory",
"text": "The bride's total is above the groom's: the sources do not recommend this.",
"ratio_groom_to_bride": 0.4545,
"source": {
"basis": "convention",
"text": "Common Kerala and South Indian practice. Sources differ on the weights, so totals from the two methods are not comparable. Not a prediction or advice on whom to marry."
}
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.10.10",
"mode": "live",
"credits_charged": 2,
"ayanamsa": "lahiri"
},
"warnings": []
}Try it
Manglik status of both and mutual cancellation
POST/v1/match/manglik
2 credits · Secret key (test or live) · getManglikMatch · Page for this operation
Request body
person_aBirth requireddatestring (date) requirede.g.
"1990-08-13"timestringpattern
^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$· e.g."06:30"time_accuracystringWith "unknown", lagna- and house-dependent fields are omitted and listed in warnings — never filled with a noon default.
one of
exact,approximate,unknown· default"exact"placeCoordinates or object or object requiredCoordinates, a place_id from /v1/places/search, or a free-text query. A vague query returns 422 place_ambiguous with candidates; the API never guesses.
One of:
- Coordinates
Fields
latitudenumber required≥ -90 · ≤ 90
longitudenumber required≥ -180 · ≤ 180
No other fields are accepted.
- object
Fields
place_idstring required
No other fields are accepted.
- object
Fields
querystring requiredat least 2 characters · at most 120 characters
No other fields are accepted.
- Coordinates
timezonestring"auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".
default
"auto"
No other fields are accepted.
person_bBirth requireddatestring (date) requirede.g.
"1990-08-13"timestringpattern
^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$· e.g."06:30"time_accuracystringWith "unknown", lagna- and house-dependent fields are omitted and listed in warnings — never filled with a noon default.
one of
exact,approximate,unknown· default"exact"placeCoordinates or object or object requiredCoordinates, a place_id from /v1/places/search, or a free-text query. A vague query returns 422 place_ambiguous with candidates; the API never guesses.
One of:
- Coordinates
Fields
latitudenumber required≥ -90 · ≤ 90
longitudenumber required≥ -180 · ≤ 180
No other fields are accepted.
- object
Fields
place_idstring required
No other fields are accepted.
- object
Fields
querystring requiredat least 2 characters · at most 120 characters
No other fields are accepted.
- Coordinates
timezonestring"auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".
default
"auto"
No other fields are accepted.
optionsOptionsayanamsastringEach system is its Swiss Ephemeris definition (a constant offset from Lahiri). Applies to chart operations; KP operations always use KP-New and the personal muhurat stays Lahiri. meta.ayanamsa names the system used.
one of
lahiri,raman,krishnamurti,yukteshwar,fagan_bradley· default"lahiri"house_systemstringone of
whole_sign· default"whole_sign"nodestringThe Rahu/Ketu the chart uses: the true (osculating) node, as Swiss Ephemeris and Drik Panchang define it, or the mean node. meta.node names the one used. POST /v1/planets/positions always returns both.
one of
true,mean· default"true"langstringone of
en,hi· default"en"viewstringcompact drops labels and prose — for LLM callers.
one of
full,compact· default"full"tonestringdescriptive: the prose fields (tithi.note, tara descriptions, the timing summary and insights, natal-transit descriptions, transit-event notes) carry reviewed descriptive sentences, attributed to the tradition and with no instructions, in options.lang. Ids, scores and every other value are unchanged. Applies to getPanchang, getFavourableDays, getPersonalTiming, getDashaTransitConfluence, getNatalTransits and listPlanetaryEvents (and those inside a bundle); elsewhere it changes nothing.
one of
default,descriptive· default"default"dasha_yearnumberDays in a Vimshottari year: 365.25 (Julian, the default), 365.2422 (tropical) or 360 (savana). Applies to /v1/dasha/vimshottari and /v1/dasha/vimshottari/current; data.basis.year_days names the one used.
one of
365.25,365.2422,360· default365.25
No other fields are accepted.
No other fields are accepted.
Response
JSON { data, meta, warnings }, where data is:
person_aManglik requiredmanglikboolean requiredseveritystringhouse_from_lagnainteger or nullOne of:
- integer
- null
house_from_mooninteger or nullOne of:
- integer
- null
house_from_venusinteger or nullOne of:
- integer
- null
cancellationsarray of string
person_bManglik requiredmanglikboolean requiredseveritystringhouse_from_lagnainteger or nullOne of:
- integer
- null
house_from_mooninteger or nullOne of:
- integer
- null
house_from_venusinteger or nullOne of:
- integer
- null
cancellationsarray of string
both_manglikboolean required
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl -X POST 'https://api.astrologics.in/v1/match/manglik' \
-H 'Authorization: Bearer al_test_YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"person_a":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"person_b":{"date":"1992-03-02","time":"14:10","place":{"latitude":19.076,"longitude":72.8777}}}'
Node.js
const res = await fetch("https://api.astrologics.in/v1/match/manglik", {
method: "POST",
headers: { Authorization: "Bearer al_test_YOUR_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"person_a": {
"date": "1990-08-13",
"time": "06:30",
"place": {
"latitude": 28.6139,
"longitude": 77.209
}
},
"person_b": {
"date": "1992-03-02",
"time": "14:10",
"place": {
"latitude": 19.076,
"longitude": 72.8777
}
}
}),
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
body = {
"person_a": {
"date": "1990-08-13",
"time": "06:30",
"place": {
"latitude": 28.6139,
"longitude": 77.209,
},
},
"person_b": {
"date": "1992-03-02",
"time": "14:10",
"place": {
"latitude": 19.076,
"longitude": 72.8777,
},
},
}
req = urllib.request.Request(
"https://api.astrologics.in/v1/match/manglik",
method="POST",
headers={"Authorization": "Bearer al_test_YOUR_KEY", "Content-Type": "application/json"},
data=json.dumps(body).encode(),
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/match/manglik');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"person_a":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"person_b":{"date":"1992-03-02","time":"14:10","place":{"latitude":19.076,"longitude":72.8777}}}',
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 1,009 characters
{
"data": {
"person_a": {
"manglik": true,
"severity": "Low (with cancellation)",
"house_from_lagna": 9,
"house_from_moon": 1,
"house_from_venus": 10,
"cancellations": [
"Mars is in its own/exalted sign (Aries) - dosha is greatly reduced.",
"Mars is conjunct the Moon - the dosha is reduced."
]
},
"person_b": {
"manglik": true,
"severity": "Low (with cancellation)",
"house_from_lagna": 8,
"house_from_moon": 1,
"house_from_venus": 1,
"cancellations": [
"Mars is in its own/exalted sign (Capricorn) - dosha is greatly reduced.",
"Mars is conjunct the Moon - the dosha is reduced.",
"Mars is conjunct Venus - the dosha is reduced."
]
},
"both_manglik": true
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.10.10",
"mode": "live",
"credits_charged": 2,
"ayanamsa": "lahiri"
},
"warnings": []
}