Skip to content
API96Astro API

API reference / Compatibility matching

Compatibility matching

Vedic and South Indian compatibility between two people, from full charts or from birth stars, singly or in bulk.

13 endpoints. Every endpoint is POST with a JSON body and your key in the Authorization header. Request schemas and examples come from the OpenAPI document; each example response was captured from the live engine and its data fields are a guide to the shape, not a contract.

Kundli Matching (Ayu Milan)

POSTAvailable

https://api.96astro.com/v1/matching/ayu-milan

Ashtakoot matching from two births: koota scores and total, Manglik for both with cancellations, Papasamya, Rajju and Vedha, and classical longevity (Ayurdaya) spans for each.

Credits
3 credits
Input
Two people's birth details
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
groomobjectRequired
groom.datetimestringRequired

Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00

Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$

Example: 1990-10-18T14:30:00

groom.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

groom.utc_offsetstring | nullOptional

Fixed offset such as +05:30, if no IANA zone is known

Default: null

groom.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

groom.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

groom.ayanamshastringOptional

Default: lahiri

groom.languagestringOptional

Output language (ISO 639-1). Each capability lists the languages it supports.

Default: en

groom.nodestringOptional

Lunar node: true (osculating) or mean.

Default: true

Allowed values: truemean

brideobjectRequired
bride.datetimestringRequired

Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00

Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$

Example: 1992-03-02T05:47:00

bride.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

bride.utc_offsetstring | nullOptional

Fixed offset such as +05:30, if no IANA zone is known

Default: null

bride.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 19.0767

bride.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 72.8767

bride.ayanamshastringOptional

Default: lahiri

bride.languagestringOptional

Output language (ISO 639-1). Each capability lists the languages it supports.

Default: en

bride.nodestringOptional

Lunar node: true (osculating) or mean.

Default: true

Allowed values: truemean

report_typestringOptional

half: the matching tables. full: also both birth charts' positions.

Default: half

Allowed values: fullhalf

Example: half

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Options (2)
ValueMeaning
fullFull (with both charts and images)
halfHalf (matching tables only)

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • ayanamsha · object
  • report_type · string
  • groom · object
  • bride · object
  • ashtakoot · object
  • manglik · object
  • papasamya · object
  • rajju · object
  • vedha · null
  • longevity · object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "ayanamsha": {
      "id": "lahiri",
      "name": "N.C. Lahiri",
      "degrees": 23.7285
    },
    "report_type": "half",
    "groom": {
      "moon_sign": "Virgo",
      "nakshatra": "Chitra",
      "pada": 2
    },
    "bride": {
      "moon_sign": "Capricorn",
      "nakshatra": "Shravana",
      "pada": 3
    },
    "ashtakoot": {
      "total": 19,
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Quick Nakshatra Match

POSTAvailable

https://api.96astro.com/v1/matching/quick-match

Ashtakoot score from two birth stars (optionally with padas): total, percentage, verdict, each koota's score and the Nadi and Bhakoot doshas.

Credits
1 credit
Input
Specific input
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
groomobjectRequired
groom.nakshatrastringRequired

Moon's nakshatra, e.g. Rohini.

Example: Rohini

groom.padainteger | nullOptional

Moon's pada (1-4). Makes the score exact.

Default: null

Limits: minimum 1, maximum 4

Example: 2

brideobjectRequired
bride.nakshatrastringRequired

Moon's nakshatra, e.g. Rohini.

Example: Hasta

bride.padainteger | nullOptional

Moon's pada (1-4). Makes the score exact.

Default: null

Limits: minimum 1, maximum 4

Example: 1

languagestringOptional

Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language.

Default: en

Allowed value: en

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • system · string
  • total · number
  • maximum · integer
  • percentage · number
  • verdict · string
  • exact · boolean
  • groom · object
  • bride · object
  • kootas · array of object
  • doshas · object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "system": "ashtakoot",
    "total": 25,
    "maximum": 36,
    "percentage": 69.4,
    "verdict": "Good",
    "exact": true,
    "groom": {
      "nakshatra": "Rohini",
      "pada": 2,
      "moon_sign": "Taurus",
      "moon_sign_lord": "Venus"
    },
    "bride": {
      "nakshatra": "Hasta",
      "pada": 1,
      "moon_sign": "Virgo",
      "moon_sign_lord": "Mercury"
    },
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Ashtakoot Details

POSTAvailable

https://api.96astro.com/v1/matching/ashtakoot-details

Koota-by-koota Ashtakoot breakdown for two birth stars, with each side's profile, the total, verdict and Nadi and Bhakoot doshas.

Credits
1 credit
Input
Specific input
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
groomobjectRequired
groom.nakshatrastringRequired

Moon's nakshatra, e.g. Rohini.

Example: Rohini

groom.padainteger | nullOptional

Moon's pada (1-4). Makes the score exact.

Default: null

Limits: minimum 1, maximum 4

Example: 2

brideobjectRequired
bride.nakshatrastringRequired

Moon's nakshatra, e.g. Rohini.

Example: Hasta

bride.padainteger | nullOptional

Moon's pada (1-4). Makes the score exact.

Default: null

Limits: minimum 1, maximum 4

Example: 1

languagestringOptional

Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language.

Default: en

Allowed value: en

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • system · string
  • total · number
  • maximum · integer
  • percentage · number
  • verdict · string
  • exact · boolean
  • groom · object
  • bride · object
  • kootas · array of object
  • doshas · object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "system": "ashtakoot",
    "total": 25,
    "maximum": 36,
    "percentage": 69.4,
    "verdict": "Good",
    "exact": true,
    "groom": {
      "nakshatra": "Rohini",
      "pada": 2,
      "moon_sign": "Taurus",
      "moon_sign_lord": "Venus",
      "profile": {
        "number": 4,
        "deity": "Brahma/Prajapati",
        "symbol": "Oxcart/Temple",
        "element": "Earth",
        "nature": "Fixed (Sthira)",
        "gana": "Manushya",
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Dashakoot Match (Ashtakoot + Rajju + Vedha)

POSTAvailable

https://api.96astro.com/v1/matching/south-match

Ten-koota match from two birth stars: the eight Ashtakoot kootas plus Rajju and Vedha.

Credits
1 credit
Input
Specific input
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
groomobjectRequired
groom.nakshatrastringRequired

Moon's nakshatra, e.g. Rohini.

Example: Rohini

groom.padainteger | nullOptional

Moon's pada (1-4). Makes the score exact.

Default: null

Limits: minimum 1, maximum 4

Example: 2

brideobjectRequired
bride.nakshatrastringRequired

Moon's nakshatra, e.g. Rohini.

Example: Hasta

bride.padainteger | nullOptional

Moon's pada (1-4). Makes the score exact.

Default: null

Limits: minimum 1, maximum 4

Example: 1

languagestringOptional

Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language.

Default: en

Allowed value: en

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • system · string
  • total · number
  • maximum · integer
  • percentage · number
  • verdict · string
  • exact · boolean
  • groom · object
  • bride · object
  • kootas · array of object
  • doshas · object
  • rajju · object
  • vedha · object
  • combined · object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "system": "ashtakoot_rajju_vedha",
    "total": 25,
    "maximum": 36,
    "percentage": 69.4,
    "verdict": "Good",
    "exact": true,
    "groom": {
      "nakshatra": "Rohini",
      "pada": 2,
      "moon_sign": "Taurus",
      "moon_sign_lord": "Venus"
    },
    "bride": {
      "nakshatra": "Hasta",
      "pada": 1,
      "moon_sign": "Virgo",
      "moon_sign_lord": "Mercury"
    },
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Porutham (Tamil)

POSTAvailable

https://api.96astro.com/v1/matching/porutham

Tamil porutham check for two birth stars: each porutham with present, severity and a reading, and a summary band with objections.

Credits
1 credit
Input
Specific input
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
groomobjectRequired
groom.nakshatrastringRequired

Moon's nakshatra, e.g. Rohini.

Example: Rohini

groom.padainteger | nullOptional

Moon's pada (1-4). Makes the score exact.

Default: null

Limits: minimum 1, maximum 4

Example: 2

brideobjectRequired
bride.nakshatrastringRequired

Moon's nakshatra, e.g. Rohini.

Example: Hasta

bride.padainteger | nullOptional

Moon's pada (1-4). Makes the score exact.

Default: null

Limits: minimum 1, maximum 4

Example: 1

languagestringOptional

Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language.

Default: en

Allowed value: en

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • system · string
  • groom · object
  • bride · object
  • count_from_bride · integer
  • poruthams · array of object
  • summary · object
  • scope · array of string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "system": "porutham",
    "groom": {
      "nakshatra": "Rohini",
      "number": 4
    },
    "bride": {
      "nakshatra": "Hasta",
      "number": 13
    },
    "count_from_bride": 19,
    "poruthams": [
      {
        "id": "mahendra",
        "name": "Mahendra",
        "present": true,
        "severity": "favourable",
        "reading": "Rohini's star is the 19th from Hasta's, which is one of the Mahendra counts. The porutham is present."
      },
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Rajju & Vedha Check

POSTAvailable

https://api.96astro.com/v1/matching/rajju-vedha

Rajju and Vedha for two birth stars: each side's cord and body part, same-cord and vedha flags with scores, and any objections.

Credits
1 credit
Input
Specific input
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
groomobjectRequired
groom.nakshatrastringRequired

Moon's nakshatra, e.g. Rohini.

Example: Rohini

groom.padainteger | nullOptional

Moon's pada (1-4). Makes the score exact.

Default: null

Limits: minimum 1, maximum 4

Example: 2

brideobjectRequired
bride.nakshatrastringRequired

Moon's nakshatra, e.g. Rohini.

Example: Hasta

bride.padainteger | nullOptional

Moon's pada (1-4). Makes the score exact.

Default: null

Limits: minimum 1, maximum 4

Example: 1

languagestringOptional

Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language.

Default: en

Allowed value: en

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • groom · object
  • bride · object
  • rajju · object
  • vedha · object
  • objections · array of string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "groom": {
      "nakshatra": "Rohini",
      "cord": "Kantha",
      "body_part": "Neck"
    },
    "bride": {
      "nakshatra": "Hasta",
      "cord": "Kantha",
      "body_part": "Neck"
    },
    "rajju": {
      "same_cord": true,
      "score": 0,
      "maximum": 3
    },
    "vedha": {
      "present": false,
      "score": 2,
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Bulk Nakshatra Match

POSTAvailable

https://api.96astro.com/v1/matching/bulk-nakshatra-match

Ashtakoot scores for up to 100 star pairs in one call.

Credits
1 credit
Input
Specific input
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
pairsarray of objectsRequired

Up to 100 pairs per request.

Limits: 1 to 100 items

pairs[].groomobjectRequired
pairs[].groom.nakshatrastringRequired

Moon's nakshatra, e.g. Rohini.

Example: Rohini

pairs[].groom.padainteger | nullOptional

Moon's pada (1-4). Makes the score exact.

Default: null

Limits: minimum 1, maximum 4

Example: 2

pairs[].brideobjectRequired
pairs[].bride.nakshatrastringRequired

Moon's nakshatra, e.g. Rohini.

Example: Hasta

pairs[].bride.padainteger | nullOptional

Moon's pada (1-4). Makes the score exact.

Default: null

Limits: minimum 1, maximum 4

Example: 1

pairs[].languagestringOptional

Output language (ISO 639-1). Each capability lists the languages it supports.

Default: en

pairs[].labelstring | nullOptional

Your reference for this pair, echoed back.

Default: null

Limits: at most 100 characters

Example: candidate-1

languagestringOptional

Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language.

Default: en

Allowed value: en

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • count · integer
  • results · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "count": 2,
    "results": [
      {
        "label": "candidate-1",
        "system": "ashtakoot",
        "total": 25,
        "maximum": 36,
        "percentage": 69.4,
        "verdict": "Good",
        "exact": true,
        "groom": {
          "nakshatra": "Rohini",
          "pada": 2,
          "moon_sign": "Taurus",
          "moon_sign_lord": "Venus"
        },
        "bride": {
          "nakshatra": "Hasta",
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Aggregate Match Statistics

POSTAvailable

https://api.96astro.com/v1/matching/aggregate-match

Scores up to 100 star pairs and returns the average, best and lowest, a count by verdict and every pair ranked.

Credits
1 credit
Input
Specific input
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
pairsarray of objectsRequired

Up to 100 pairs per request.

Limits: 1 to 100 items

pairs[].groomobjectRequired
pairs[].groom.nakshatrastringRequired

Moon's nakshatra, e.g. Rohini.

Example: Rohini

pairs[].groom.padainteger | nullOptional

Moon's pada (1-4). Makes the score exact.

Default: null

Limits: minimum 1, maximum 4

Example: 2

pairs[].brideobjectRequired
pairs[].bride.nakshatrastringRequired

Moon's nakshatra, e.g. Rohini.

Example: Hasta

pairs[].bride.padainteger | nullOptional

Moon's pada (1-4). Makes the score exact.

Default: null

Limits: minimum 1, maximum 4

Example: 1

pairs[].languagestringOptional

Output language (ISO 639-1). Each capability lists the languages it supports.

Default: en

pairs[].labelstring | nullOptional

Your reference for this pair, echoed back.

Default: null

Limits: at most 100 characters

Example: candidate-1

languagestringOptional

Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language.

Default: en

Allowed value: en

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • pairs · integer
  • average_total · number
  • maximum · integer
  • average_percentage · number
  • best · object
  • lowest · object
  • verdicts · object
  • ranked · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "pairs": 2,
    "average_total": 20.25,
    "maximum": 36,
    "average_percentage": 56.2,
    "best": {
      "label": "candidate-1",
      "total": 25,
      "verdict": "Good"
    },
    "lowest": {
      "label": "candidate-2",
      "total": 15.5,
      "verdict": "Below Average"
    },
    "verdicts": {
      "Good": 1,
      "Below Average": 1
    },
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Bulk Dashakoot Match

POSTAvailable

https://api.96astro.com/v1/matching/bulk-south-match

Ten-koota scores for many star pairs in one call.

Credits
1 credit
Input
Specific input
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
pairsarray of objectsRequired

Up to 100 pairs per request.

Limits: 1 to 100 items

pairs[].groomobjectRequired
pairs[].groom.nakshatrastringRequired

Moon's nakshatra, e.g. Rohini.

Example: Rohini

pairs[].groom.padainteger | nullOptional

Moon's pada (1-4). Makes the score exact.

Default: null

Limits: minimum 1, maximum 4

Example: 2

pairs[].brideobjectRequired
pairs[].bride.nakshatrastringRequired

Moon's nakshatra, e.g. Rohini.

Example: Hasta

pairs[].bride.padainteger | nullOptional

Moon's pada (1-4). Makes the score exact.

Default: null

Limits: minimum 1, maximum 4

Example: 1

pairs[].languagestringOptional

Output language (ISO 639-1). Each capability lists the languages it supports.

Default: en

pairs[].labelstring | nullOptional

Your reference for this pair, echoed back.

Default: null

Limits: at most 100 characters

Example: candidate-1

languagestringOptional

Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language.

Default: en

Allowed value: en

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • count · integer
  • results · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "count": 2,
    "results": [
      {
        "label": "candidate-1",
        "system": "ashtakoot_rajju_vedha",
        "total": 25,
        "maximum": 36,
        "percentage": 69.4,
        "verdict": "Good",
        "exact": true,
        "groom": {
          "nakshatra": "Rohini",
          "pada": 2,
          "moon_sign": "Taurus",
          "moon_sign_lord": "Venus"
        },
        "bride": {
          "nakshatra": "Hasta",
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Papasamya (Pair)

POSTAvailable

https://api.96astro.com/v1/matching/papasamya

Papasamya (malefic balance) for two births: each side's score and contributing planets, the difference and a verdict.

Credits
3 credits
Input
Specific input
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
groomobjectRequired
groom.datetimestringRequired

Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00

Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$

Example: 1990-10-18T14:30:00

groom.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

groom.utc_offsetstring | nullOptional

Fixed offset such as +05:30, if no IANA zone is known

Default: null

groom.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

groom.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

groom.ayanamshastringOptional

Default: lahiri

groom.languagestringOptional

Output language (ISO 639-1). Each capability lists the languages it supports.

Default: en

groom.nodestringOptional

Lunar node: true (osculating) or mean.

Default: true

Allowed values: truemean

brideobjectRequired
bride.datetimestringRequired

Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00

Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$

Example: 1992-03-02T05:47:00

bride.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

bride.utc_offsetstring | nullOptional

Fixed offset such as +05:30, if no IANA zone is known

Default: null

bride.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 19.0767

bride.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 72.8767

bride.ayanamshastringOptional

Default: lahiri

bride.languagestringOptional

Output language (ISO 639-1). Each capability lists the languages it supports.

Default: en

bride.nodestringOptional

Lunar node: true (osculating) or mean.

Default: true

Allowed values: truemean

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • ayanamsha · object
  • counted_from · string
  • note · string
  • checked_houses · array of integer
  • groom · object
  • bride · object
  • difference · number
  • difference_percent · number
  • verdict · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "ayanamsha": {
      "id": "lahiri",
      "name": "N.C. Lahiri",
      "degrees": 23.7285
    },
    "counted_from": "ascendant",
    "note": "Malefics in houses 1, 2, 4, 7, 8 and 12 from the ascendant score points; the Moon counts only when waning.",
    "checked_houses": [
      1,
      2,
      4
    ],
    "groom": {
      "score": 3.5,
      "has_dosha": true,
      "tithi": "Krishna Amavasya",
      "contributions": [
        {
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Papasamya (Single Chart)

POSTAvailable

https://api.96astro.com/v1/matching/papasamya-single

Papasamya (malefic balance) for one birth: the score, the contributing planets by house, the level and whether it counts as a dosha.

Credits
3 credits
Input
Specific input
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
datetimestringRequired

Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00

Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$

Example: 1990-10-18T14:30:00

timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

utc_offsetstring | nullOptional

Fixed offset such as +05:30, if no IANA zone is known

Default: null

latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

ayanamshastringOptional

Default: lahiri

languagestringOptional

Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language.

Default: en

Allowed value: en

nodestringOptional

Lunar node: true (osculating) or mean.

Default: true

Allowed values: truemean

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • ayanamsha · object
  • counted_from · string
  • note · string
  • checked_houses · array of integer
  • score · number
  • has_dosha · boolean
  • tithi · string
  • contributions · array of object
  • level · string
  • summary · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "ayanamsha": {
      "id": "lahiri",
      "name": "N.C. Lahiri",
      "degrees": 23.7285
    },
    "counted_from": "ascendant",
    "note": "Malefics in houses 1, 2, 4, 7, 8 and 12 from the ascendant score points; the Moon counts only when waning.",
    "checked_houses": [
      1,
      2,
      4
    ],
    "score": 3.5,
    "has_dosha": true,
    "tithi": "Krishna Amavasya",
    "contributions": [
      {
        "planet": "Saturn",
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Life-Stage Match

POSTAvailable

https://api.96astro.com/v1/matching/life-stage-match

The age gap and where each partner stands in their Saturn and Jupiter cycles, with an alignment band and the reasons for it.

Credits
1 credit
Input
Two people's birth details
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
groomobjectRequired
groom.datetimestringRequired

Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00

Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$

Example: 1990-10-18T14:30:00

groom.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

groom.utc_offsetstring | nullOptional

Fixed offset such as +05:30, if no IANA zone is known

Default: null

groom.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

groom.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

groom.ayanamshastringOptional

Default: lahiri

groom.languagestringOptional

Output language (ISO 639-1). Each capability lists the languages it supports.

Default: en

brideobjectRequired
bride.datetimestringRequired

Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00

Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$

Example: 1992-03-02T05:47:00

bride.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

bride.utc_offsetstring | nullOptional

Fixed offset such as +05:30, if no IANA zone is known

Default: null

bride.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 19.0767

bride.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 72.8767

bride.ayanamshastringOptional

Default: lahiri

bride.languagestringOptional

Output language (ISO 639-1). Each capability lists the languages it supports.

Default: en

as_ofstring | nullOptional

Date the reading is for (YYYY-MM-DD). Today in UTC when omitted.

Default: null

Limits: format date

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • as_of · string
  • age_gap · object
  • groom · object
  • bride · object
  • alignment · object
  • scope · array of string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "as_of": "2026-10-14",
    "age_gap": {
      "years": 1,
      "months": 4,
      "days": 13,
      "total_days": 501,
      "older": "groom",
      "statement": "Groom is older than Bride by 1 year and 4 months."
    },
    "groom": {
      "age_years": 36,
      "saturn": {
        "cycle": 2,
        "returns_completed": 1,
        "next_return_age": 58.3,
        "years_to_next": 22.3,
        "last_return_age": 29.2,
        "years_since_last": 6.8,
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Marriage Sustainability

POSTAvailable

https://api.96astro.com/v1/matching/marriage-sustainability

The single-chart marriage layers (7th house, Navamsa, Upapada, darakaraka) for both partners, a joint verdict, shared timing windows, and which layers could not be measured.

Credits
3 credits
Input
Specific input
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
groomobjectRequired
groom.datetimestringRequired

Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00

Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$

Example: 1990-10-18T14:30:00

groom.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

groom.utc_offsetstring | nullOptional

Fixed offset such as +05:30, if no IANA zone is known

Default: null

groom.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

groom.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

groom.ayanamshastringOptional

Default: lahiri

groom.languagestringOptional

Output language (ISO 639-1). Each capability lists the languages it supports.

Default: en

groom.nodestringOptional

Lunar node: true (osculating) or mean.

Default: true

Allowed values: truemean

brideobjectRequired
bride.datetimestringRequired

Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00

Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$

Example: 1992-03-02T05:47:00

bride.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

bride.utc_offsetstring | nullOptional

Fixed offset such as +05:30, if no IANA zone is known

Default: null

bride.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 19.0767

bride.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 72.8767

bride.ayanamshastringOptional

Default: lahiri

bride.languagestringOptional

Output language (ISO 639-1). Each capability lists the languages it supports.

Default: en

bride.nodestringOptional

Lunar node: true (osculating) or mean.

Default: true

Allowed values: truemean

as_ofstring | nullOptional

Date the timing is read from (YYYY-MM-DD). Today in UTC.

Default: null

Limits: format date

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • ayanamsha · object
  • as_of · string
  • groom · object
  • bride · object
  • joint · object
  • shared_periods · object
  • scope · array of string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "ayanamsha": {
      "id": "lahiri",
      "name": "N.C. Lahiri",
      "degrees": 23.7285
    },
    "as_of": "2026-10-14",
    "groom": {
      "darakaraka": "Sun",
      "upapada_sign": "Aquarius",
      "layers": {
        "seventh_house": {
          "measured": true,
          "score": 43.6,
          "band": "moderate_low",
          "band_label": "Mixed — workable with awareness",
          "statement": null,
          "evidence": [
            {
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.