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_a Birth required
    • date string (date) required

      e.g. "1990-08-13"

    • time string

      pattern ^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$ · e.g. "06:30"

    • time_accuracy string

      With "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"

    • place Coordinates or object or object required

      Coordinates, 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:

      1. Coordinates
        Fields
        • latitude number required

          ≥ -90 · ≤ 90

        • longitude number required

          ≥ -180 · ≤ 180

        No other fields are accepted.

      2. object
        Fields
        • place_id string required

        No other fields are accepted.

      3. object
        Fields
        • query string required

          at least 2 characters · at most 120 characters

        No other fields are accepted.

    • timezone string

      "auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".

      default "auto"

    No other fields are accepted.

  • person_b Birth required
    • date string (date) required

      e.g. "1990-08-13"

    • time string

      pattern ^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$ · e.g. "06:30"

    • time_accuracy string

      With "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"

    • place Coordinates or object or object required

      Coordinates, 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:

      1. Coordinates
        Fields
        • latitude number required

          ≥ -90 · ≤ 90

        • longitude number required

          ≥ -180 · ≤ 180

        No other fields are accepted.

      2. object
        Fields
        • place_id string required

        No other fields are accepted.

      3. object
        Fields
        • query string required

          at least 2 characters · at most 120 characters

        No other fields are accepted.

    • timezone string

      "auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".

      default "auto"

    No other fields are accepted.

  • options Options
    • ayanamsa string

      Each 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_system string

      one of whole_sign · default "whole_sign"

    • node string

      The 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"

    • lang string

      one of en, hi · default "en"

    • view string

      compact drops labels and prose — for LLM callers.

      one of full, compact · default "full"

    • tone string

      descriptive: 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_year number

      Days 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 · default 365.25

    No other fields are accepted.

No other fields are accepted.

Response

JSON { data, meta, warnings }, where data is:

  • total number required

    ≥ 0 · ≤ 36

  • max 36 required
  • conclusion string required
  • kootas array of object required
    • name string required
    • label string required
    • score number required
    • max number required
    • note string required
  • doshas object required
    • nadi boolean required
    • bhakoot boolean required
  • person_a MoonProfile required
    • rashi string required
    • nakshatra string required
    • gana string required
    • nadi string required
    • yoni string required
  • person_b MoonProfile required
    • rashi string required
    • nakshatra string required
    • gana string required
    • nadi string required
    • yoni string 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

Leave empty to use the shared demo key (limited). Test keys only: never charged. Kept in this browser tab and sent through this site to the API. Create one

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_a Birth required
    • date string (date) required

      e.g. "1990-08-13"

    • time string

      pattern ^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$ · e.g. "06:30"

    • time_accuracy string

      With "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"

    • place Coordinates or object or object required

      Coordinates, 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:

      1. Coordinates
        Fields
        • latitude number required

          ≥ -90 · ≤ 90

        • longitude number required

          ≥ -180 · ≤ 180

        No other fields are accepted.

      2. object
        Fields
        • place_id string required

        No other fields are accepted.

      3. object
        Fields
        • query string required

          at least 2 characters · at most 120 characters

        No other fields are accepted.

    • timezone string

      "auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".

      default "auto"

    No other fields are accepted.

  • person_b Birth required
    • date string (date) required

      e.g. "1990-08-13"

    • time string

      pattern ^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$ · e.g. "06:30"

    • time_accuracy string

      With "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"

    • place Coordinates or object or object required

      Coordinates, 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:

      1. Coordinates
        Fields
        • latitude number required

          ≥ -90 · ≤ 90

        • longitude number required

          ≥ -180 · ≤ 180

        No other fields are accepted.

      2. object
        Fields
        • place_id string required

        No other fields are accepted.

      3. object
        Fields
        • query string required

          at least 2 characters · at most 120 characters

        No other fields are accepted.

    • timezone string

      "auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".

      default "auto"

    No other fields are accepted.

  • options Options
    • ayanamsa string

      Each 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_system string

      one of whole_sign · default "whole_sign"

    • node string

      The 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"

    • lang string

      one of en, hi · default "en"

    • view string

      compact drops labels and prose — for LLM callers.

      one of full, compact · default "full"

    • tone string

      descriptive: 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_year number

      Days 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 · default 365.25

    No other fields are accepted.

  • minimum_agreeing integer

    Sources 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:

  • poruthams array of object required
    • id string required

      one of dina, gana, mahendra, stree_deergha, yoni, rasi, rasi_adhipati, vashya, rajju, vedha

    • label string required
    • result string required

      one of agrees, moderate, does_not_agree

    • score number required

      1, 0.5 or 0.

    • groom string required
    • bride string required
    • count integer or null required

      One of:

      1. integer
      2. null
  • agreeing integer required
  • moderate integer required
  • not_agreeing integer required
  • score number required
  • max integer required
  • rajju_agrees boolean required
  • vedha_agrees boolean required
  • minimum_agreeing integer required
  • meets_minimum boolean required

    Rajju agrees, and at least minimum_agreeing poruthams agree.

  • source object required
    • basis string required

      one of convention

    • text string 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

Leave empty to use the shared demo key (limited). Test keys only: never charged. Kept in this browser tab and sent through this site to the API. Create one

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_a Birth required
    • date string (date) required

      e.g. "1990-08-13"

    • time string

      pattern ^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$ · e.g. "06:30"

    • time_accuracy string

      With "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"

    • place Coordinates or object or object required

      Coordinates, 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:

      1. Coordinates
        Fields
        • latitude number required

          ≥ -90 · ≤ 90

        • longitude number required

          ≥ -180 · ≤ 180

        No other fields are accepted.

      2. object
        Fields
        • place_id string required

        No other fields are accepted.

      3. object
        Fields
        • query string required

          at least 2 characters · at most 120 characters

        No other fields are accepted.

    • timezone string

      "auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".

      default "auto"

    No other fields are accepted.

  • person_b Birth required
    • date string (date) required

      e.g. "1990-08-13"

    • time string

      pattern ^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$ · e.g. "06:30"

    • time_accuracy string

      With "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"

    • place Coordinates or object or object required

      Coordinates, 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:

      1. Coordinates
        Fields
        • latitude number required

          ≥ -90 · ≤ 90

        • longitude number required

          ≥ -180 · ≤ 180

        No other fields are accepted.

      2. object
        Fields
        • place_id string required

        No other fields are accepted.

      3. object
        Fields
        • query string required

          at least 2 characters · at most 120 characters

        No other fields are accepted.

    • timezone string

      "auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".

      default "auto"

    No other fields are accepted.

  • options Options
    • ayanamsa string

      Each 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_system string

      one of whole_sign · default "whole_sign"

    • node string

      The 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"

    • lang string

      one of en, hi · default "en"

    • view string

      compact drops labels and prose — for LLM callers.

      one of full, compact · default "full"

    • tone string

      descriptive: 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_year number

      Days 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 · default 365.25

    No other fields are accepted.

  • method string

    one of count, weighted · default "count"

  • include_ketu boolean

    Sources differ on Ketu. Only with method count.

    default false

No other fields are accepted.

Response

JSON { data, meta, warnings }, where data is:

  • method string required

    one of count, weighted

  • include_ketu boolean required
  • groom PapaChart required
    • total number required
    • rows array of object required
      Fields
      • planet string required
      • reference string required

        one of lagna, moon, venus

      • house integer required

        ≥ 1 · ≤ 12

      • counted boolean required

        In house 1, 2, 4, 7, 8 or 12 from the reference.

      • dignity string or null required

        One of:

        1. string
        2. null
      • points number required
  • bride PapaChart required
    • total number required
    • rows array of object required
      Fields
      • planet string required
      • reference string required

        one of lagna, moon, venus

      • house integer required

        ≥ 1 · ≤ 12

      • counted boolean required

        In house 1, 2, 4, 7, 8 or 12 from the reference.

      • dignity string or null required

        One of:

        1. string
        2. null
      • points number required
  • result string required

    one of satisfactory, not_satisfactory

  • text string required
  • ratio_groom_to_bride number or null required

    One of:

    1. number
    2. null
  • source object required
    • basis string required

      one of convention

    • text string 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

Leave empty to use the shared demo key (limited). Test keys only: never charged. Kept in this browser tab and sent through this site to the API. Create one

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_a Birth required
    • date string (date) required

      e.g. "1990-08-13"

    • time string

      pattern ^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$ · e.g. "06:30"

    • time_accuracy string

      With "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"

    • place Coordinates or object or object required

      Coordinates, 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:

      1. Coordinates
        Fields
        • latitude number required

          ≥ -90 · ≤ 90

        • longitude number required

          ≥ -180 · ≤ 180

        No other fields are accepted.

      2. object
        Fields
        • place_id string required

        No other fields are accepted.

      3. object
        Fields
        • query string required

          at least 2 characters · at most 120 characters

        No other fields are accepted.

    • timezone string

      "auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".

      default "auto"

    No other fields are accepted.

  • person_b Birth required
    • date string (date) required

      e.g. "1990-08-13"

    • time string

      pattern ^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$ · e.g. "06:30"

    • time_accuracy string

      With "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"

    • place Coordinates or object or object required

      Coordinates, 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:

      1. Coordinates
        Fields
        • latitude number required

          ≥ -90 · ≤ 90

        • longitude number required

          ≥ -180 · ≤ 180

        No other fields are accepted.

      2. object
        Fields
        • place_id string required

        No other fields are accepted.

      3. object
        Fields
        • query string required

          at least 2 characters · at most 120 characters

        No other fields are accepted.

    • timezone string

      "auto" (from coordinates AND date), an IANA name, or a fixed offset like "+05:30".

      default "auto"

    No other fields are accepted.

  • options Options
    • ayanamsa string

      Each 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_system string

      one of whole_sign · default "whole_sign"

    • node string

      The 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"

    • lang string

      one of en, hi · default "en"

    • view string

      compact drops labels and prose — for LLM callers.

      one of full, compact · default "full"

    • tone string

      descriptive: 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_year number

      Days 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 · default 365.25

    No other fields are accepted.

No other fields are accepted.

Response

JSON { data, meta, warnings }, where data is:

  • person_a Manglik required
    • manglik boolean required
    • severity string
    • house_from_lagna integer or null

      One of:

      1. integer
      2. null
    • house_from_moon integer or null

      One of:

      1. integer
      2. null
    • house_from_venus integer or null

      One of:

      1. integer
      2. null
    • cancellations array of string
  • person_b Manglik required
    • manglik boolean required
    • severity string
    • house_from_lagna integer or null

      One of:

      1. integer
      2. null
    • house_from_moon integer or null

      One of:

      1. integer
      2. null
    • house_from_venus integer or null

      One of:

      1. integer
      2. null
    • cancellations array of string
  • both_manglik boolean 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": []
}
Try it

Leave empty to use the shared demo key (limited). Test keys only: never charged. Kept in this browser tab and sent through this site to the API. Create one