Skip to content
API96Astro API

API reference / Western astrology

Western astrology

Tropical natal charts, transits, sun-sign forecasts and synastry.

32 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.

Western Natal Chart

POSTAvailable

https://api.96astro.com/v1/western/western-natal-chart

Tropical natal chart: Sun, Moon and rising signs, ascendant and midheaven, planets with sign and house, the house cusps, and aspects with orb and meaning.

Credits
1 credit
Input
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
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

namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

house_systemstringOptional

P Placidus, K Koch, W Whole sign, E Equal.

Default: P

Allowed values: PKWE

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 (4)
ValueMeaning
PPlacidus
KKoch
WWhole sign
EEqual

Response · fields in data

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

  • name · string
  • date · string
  • time · string
  • lat · number
  • lon · number
  • tz · number
  • julian_day · number
  • sun_sign · string
  • moon_sign · string
  • ascendant_sign · string
  • big_three · object
  • ascendant · object
  • midheaven · object
  • planets · array of object
  • houses · object
  • aspects · array of object
  • aspect_count · integer
  • house_system · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": "Native",
    "date": "1990-10-18",
    "time": "14:30:00",
    "lat": 28.6139,
    "lon": 77.209,
    "tz": 5.5,
    "julian_day": 2448182.875,
    "sun_sign": "Libra",
    "moon_sign": "Libra",
    "ascendant_sign": "Aquarius",
    "big_three": {
      "sun": {
        "sign": "Libra",
        "symbol": "♎"
      },
      "moon": {
        "sign": "Libra",
        "symbol": "♎"
  …

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.

Western Planet Details

POSTAvailable

https://api.96astro.com/v1/western/western-planet-details

Tropical longitude, sign, element, mode, ruler and house for each planet.

Credits
1 credit
Input
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
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

namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

house_systemstringOptional

P Placidus, K Koch, W Whole sign, E Equal.

Default: P

Allowed values: PKWE

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.

  • name · string
  • planets · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": "Native",
    "planets": [
      {
        "planet": "Sun",
        "name": "Sun",
        "symbol": "☉",
        "longitude": 204.7272,
        "degree": "24°43'38\" Libra",
        "degree_in_sign": 24.73,
        "sign": "Libra",
        "sign_symbol": "♎",
        "element": "Air",
        "mode": "Cardinal",
        "ruler": "Venus",
        "house": 8,
        "house_signification": "Transformation, shared resources, death, sexuality, inheritance",
        "available": true,
        "retrograde": false,
  …

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.

Western House Cusps

POSTAvailable

https://api.96astro.com/v1/western/western-house-cusps

Twelve house cusps with sign, signification, ruler and the planets in each, plus the ascendant and midheaven.

Credits
1 credit
Input
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
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

namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

house_systemstringOptional

P Placidus, K Koch, W Whole sign, E Equal.

Default: P

Allowed values: PKWE

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 (4)
ValueMeaning
PPlacidus
KKoch
WWhole sign
EEqual

Response · fields in data

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

  • name · string
  • house_system · string
  • ascendant · object
  • midheaven · object
  • houses · array of object
  • unplaced · array of string
  • complete · boolean

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": "Native",
    "house_system": "P",
    "ascendant": {
      "longitude": 317.6256,
      "dms": "17°37'32\" Aquarius",
      "sign": "Aquarius",
      "sign_symbol": "♒"
    },
    "midheaven": {
      "longitude": 240.945,
      "dms": "00°56'42\" Sagittarius",
      "sign": "Sagittarius",
      "sign_symbol": "♐"
    },
    "houses": [
      {
        "house": 1,
        "cusp": 317.6256,
  …

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.

Western Natal Aspects

POSTAvailable

https://api.96astro.com/v1/western/western-natal-aspects

Aspects between natal planets with orb, nature and meaning, split into major and minor.

Credits
1 credit
Input
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
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

namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

house_systemstringOptional

P Placidus, K Koch, W Whole sign, E Equal.

Default: P

Allowed values: PKWE

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.

  • name · string
  • total_aspects · integer
  • major_aspects · array of object
  • minor_aspects · array of object
  • all_aspects · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": "Native",
    "total_aspects": 23,
    "major_aspects": [
      {
        "planet1": "Moon",
        "planet1_symbol": "☽",
        "planet2": "Mercury",
        "planet2_symbol": "☿",
        "aspect": "Conjunction",
        "symbol": "☌",
        "nature": "Intensifying",
        "orb": 0.46,
        "exact_angle": 0.46,
        "meaning": "☽ Moon merges and intensifies ☿ Mercury — emotions, instincts, and inner needs conjunction with mind, communication, and perception."
      },
      {
        "planet1": "Moon",
        "planet1_symbol": "☽",
  …

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.

Western Natal Wheel

POSTAvailable

https://api.96astro.com/v1/western/western-natal-wheel

The natal wheel as an SVG drawing with real house cusps and aspect lines, plus the cusp, planet and aspect data drawn.

Credits
1 credit
Input
Birth details
Output
JSON, SVG
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

namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

house_systemstringOptional

P Placidus, K Koch, W Whole sign, E Equal.

Default: P

Allowed values: PKWE

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 (4)
ValueMeaning
PPlacidus
KKoch
WWhole sign
EEqual

Response · fields in data

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

  • placidus · object
  • house_system · string
  • images · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "placidus": {
      "cusps": [
        317.6256380956435,
        358.45149540760406,
        33.37273415297357
      ],
      "asc_long": 317.6256,
      "mc_long": 240.945,
      "planets": {
        "Sun": {
          "longitude": 204.7272,
          "retrograde": false
        },
        "Moon": {
          "longitude": 201.6087,
          "retrograde": false
        },
        "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.

Western Detailed Planet Report

POSTAvailable

https://api.96astro.com/v1/western/western-detailed-report

Interpretive report: each planet's sign, house, dignity and meaning, the houses, the dominant element and the key aspects, with a summary.

Credits
10 credits
Input
Birth details
Output
JSON
Delivery
Direct response (JSON); PDF via /v1/jobs/pdf
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

namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

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.

  • name · string
  • house_system · string
  • summary · string
  • sun_sign · string
  • moon_sign · string
  • ascendant · object
  • midheaven · object
  • dominant_element · string
  • houses · array of object
  • planets · array of object
  • key_aspects · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": "Native",
    "house_system": "placidus",
    "summary": "Native has Sun in Libra, Moon in Libra, and Aquarius Rising. The chart contains 23 active aspects. Dominant element: Air.",
    "sun_sign": "Libra",
    "moon_sign": "Libra",
    "ascendant": {
      "longitude": 317.6256,
      "sign": "Aquarius",
      "degree_in_sign": 17.6256
    },
    "midheaven": {
      "longitude": 240.945,
      "sign": "Sagittarius",
      "degree_in_sign": 0.945
    },
    "dominant_element": "Air",
    "houses": [
      {
  …

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.

Lunar Node Report

POSTAvailable

https://api.96astro.com/v1/western/western-node-report

The lunar node's sign, degree and house with the house meaning, its ruler's sign and house, and an interpretation.

Credits
1 credit
Input
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
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

namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

house_systemstringOptional

P Placidus, K Koch, W Whole sign, E Equal.

Default: P

Allowed values: PKWE

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 (4)
ValueMeaning
PPlacidus
KKoch
WWhole sign
EEqual

Response · fields in data

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

  • name · string
  • node_considered · string
  • node_current_zodiac · string
  • node_degree · string
  • node_current_house · integer
  • node_house_meaning · string
  • node_lord · string
  • node_lord_zodiac · string
  • node_lord_house · integer
  • node_prediction · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": "",
    "node_considered": "North Node",
    "node_current_zodiac": "Aquarius",
    "node_degree": "03°40'13\" Aquarius",
    "node_current_house": 12,
    "node_house_meaning": "Hidden matters, solitude, spirituality, karma, secret enemies",
    "node_lord": "Uranus",
    "node_lord_zodiac": "Capricorn",
    "node_lord_house": 11,
    "node_prediction": "Your north node sits in Aquarius in house 12, which points growth toward hidden matters, solitude, spirituality, karma, secret enemies through the qualities of Aquarius. Its ruler Uranus is in Capricorn in house 11, so progress here comes by way of rebellion, innovation, and sudden change."
  },
  "meta": {
    "request_id": "req_00000000000000000000",
    "api_version": "v1",
    "credits_used": 0,
    "warnings": [],
    "language": "en"
  }
}

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.

Ascendant Report

POSTAvailable

https://api.96astro.com/v1/western/western-ascendant-report

Rising sign with degree, element and mode, the chart ruler's sign and house, and an interpretation.

Credits
1 credit
Input
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
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

namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

house_systemstringOptional

P Placidus, K Koch, W Whole sign, E Equal.

Default: P

Allowed values: PKWE

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 (4)
ValueMeaning
PPlacidus
KKoch
WWhole sign
EEqual

Response · fields in data

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

  • name · string
  • planet_considered · string
  • ascendant_current_zodiac · string
  • ascendant_degree · string
  • ascendant_element · string
  • ascendant_mode · string
  • ascendant_lord · string
  • ascendant_lord_zodiac · string
  • ascendant_lord_house · integer
  • ascendant_prediction · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": "",
    "planet_considered": "Ascendant",
    "ascendant_current_zodiac": "Aquarius",
    "ascendant_degree": "17°37'32\" Aquarius",
    "ascendant_element": "Air",
    "ascendant_mode": "Fixed",
    "ascendant_lord": "Uranus",
    "ascendant_lord_zodiac": "Capricorn",
    "ascendant_lord_house": 11,
    "ascendant_prediction": "You rise in Aquarius, a fixed air sign, so first impressions of you carry that quality before anything else does. The chart's ruler is Uranus, placed in Capricorn in house 11 -- so your outward manner is steered by friends, groups, hopes, dreams, social networks."
  },
  "meta": {
    "request_id": "req_00000000000000000000",
    "api_version": "v1",
    "credits_used": 0,
    "warnings": [],
    "language": "en"
  }
}

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.

Western Transit Chart

POSTAvailable

https://api.96astro.com/v1/western/western-transit-chart

Natal and current transit planet positions, transit-to-natal aspects with orb, intensity and meaning, and the major transits.

Credits
1 credit
Input
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
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

namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

house_systemstringOptional

P Placidus, K Koch, W Whole sign, E Equal.

Default: P

Allowed values: PKWE

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.

  • name · string
  • as_of · string
  • natal_planets · array of object
  • transit_planets · array of object
  • transit_to_natal_aspects · array of object
  • dominant_element · string
  • major_transits · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": "Native",
    "as_of": "2026-10-14",
    "natal_planets": [
      {
        "planet": "Sun",
        "name": "Sun",
        "available": true,
        "longitude": 204.7272,
        "sign": "Libra",
        "sign_symbol": "♎",
        "degree": "24°43'38\" Libra",
        "degree_in_sign": 24.73,
        "retrograde": false,
        "speed": 0.9932,
        "symbol": "☉"
      },
      {
        "planet": "Moon",
  …

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.

Western Transit Wheel

POSTAvailable

https://api.96astro.com/v1/western/western-transit-wheel

The natal wheel with the transiting planets drawn around it, as an SVG drawing, plus the transit-to-natal aspects and a table of both rings.

Credits
1 credit
Input
Birth details
Output
JSON, SVG
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

namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

house_systemstringOptional

P Placidus, K Koch, W Whole sign, E Equal.

Default: P

Allowed values: PKWE

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.

  • name · string
  • as_of · string
  • inner_ring · string
  • outer_ring · string
  • houses_shown · string
  • transit_to_natal_aspects · array of object
  • table · object
  • images · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": "Native",
    "as_of": "2026-10-14",
    "inner_ring": "natal",
    "outer_ring": "transit",
    "houses_shown": "natal",
    "transit_to_natal_aspects": [
      {
        "transit_planet": "Sun",
        "transit_sign": "Libra",
        "transit_retrograde": false,
        "natal_planet": "Venus",
        "natal_sign": "Libra",
        "aspect": "Conjunction",
        "symbol": "☌",
        "nature": "Intensifying",
        "orb": 0.06,
        "intensity": "major",
        "period": "Today",
  …

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.

Transit Dates

POSTAvailable

https://api.96astro.com/v1/western/western-transit-dates

Dates when transiting planets aspect natal points within a look-ahead window.

Credits
3 credits
Input
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
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

namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

house_systemstringOptional

P Placidus, K Koch, W Whole sign, E Equal.

Default: P

Allowed values: PKWE

days_aheadintegerOptional

Look-ahead window in days.

Default: 90

Limits: minimum 1, maximum 1830

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.

  • name · string
  • days_requested · integer
  • days_scanned · integer
  • window_capped · boolean
  • max_days · integer
  • events_found · integer
  • events_returned · integer
  • events_truncated · boolean
  • transit_events · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": "Native",
    "days_requested": 90,
    "days_scanned": 90,
    "window_capped": false,
    "max_days": 730,
    "events_found": 9,
    "events_returned": 9,
    "events_truncated": false,
    "transit_events": [
      {
        "date": "2026-10-15",
        "exact_at": "2026-10-15T19:08:37Z",
        "transit_planet": "Jupiter",
        "transit_sign": "Leo",
        "transit_retrograde": false,
        "natal_planet": "Mercury",
        "natal_sign": "Libra",
        "aspect": "Sextile",
  …

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.

Daily Transit Prediction

POSTAvailable

https://api.96astro.com/v1/western/western-daily-transit

A day's theme from transits to the natal chart, with the active and major transit-to-natal aspects and their meanings.

Credits
1 credit
Input
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
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

namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

house_systemstringOptional

P Placidus, K Koch, W Whole sign, E Equal.

Default: P

Allowed values: PKWE

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.

  • name · string
  • date · string
  • sun_sign · string
  • daily_theme · string
  • dominant_element · string
  • active_transits · array of object
  • transit_count · integer
  • major_transits · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": "Native",
    "date": "2026-10-14",
    "sun_sign": "Libra",
    "daily_theme": "Assert your desire for fairness and beauty",
    "dominant_element": "Fire",
    "active_transits": [
      {
        "transit_planet": "Sun",
        "transit_sign": "Libra",
        "transit_retrograde": false,
        "natal_planet": "Venus",
        "natal_sign": "Libra",
        "aspect": "Conjunction",
        "symbol": "☌",
        "nature": "Intensifying",
        "orb": 0.06,
        "intensity": "major",
        "period": "Today",
  …

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.

Western Yearly Forecast

POSTAvailable

https://api.96astro.com/v1/western/western-yearly-forecast

Year ahead from the solar return: the return moment and chart, the year's main transit themes with exact dates, and a summary.

Credits
10 credits
Input
Birth details
Output
JSON
Delivery
Direct response (JSON); PDF via /v1/jobs/pdf
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

namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

target_yearintegerRequired

Calendar year of the solar return, e.g. 2026.

Limits: minimum 1800, maximum 2399

Example: 2026

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.

  • name · null
  • target_year · integer
  • house_system · string
  • sun_sign · string
  • solar_return · object
  • return_year · object
  • dominant_element · string
  • return_chart · object
  • themes · array of object
  • themes_method · string
  • summary · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": null,
    "target_year": 2026,
    "house_system": "placidus",
    "sun_sign": "Libra",
    "solar_return": {
      "utc": "2026-10-18T02:17:53Z",
      "local": {
        "datetime": "2026-10-18T07:47:53+05:30",
        "timezone": "Asia/Kolkata"
      },
      "sun_longitude": 204.7272,
      "location": {
        "latitude": 28.6139,
        "longitude": 77.209,
        "basis": "birth_place"
      }
    },
    "return_year": {
  …

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.

Current Planet Positions (Tropical)

POSTAvailable

https://api.96astro.com/v1/western/western-transit-planets

Current tropical planet positions with sign, degree and retrograde flags, plus the dominant element.

Credits
1 credit
Input
Name
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
namestringOptional

Name to print in the reading (optional).

Default: ""

Limits: at most 120 characters

Example: ""

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.

  • name · string
  • as_of · string
  • planets · array of object
  • dominant_element · string
  • retrograde_planets · array of string
  • retrograde_count · integer

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": "Seeker",
    "as_of": "2026-10-14T08:30:17Z",
    "planets": [
      {
        "planet": "Sun",
        "symbol": "☉",
        "sign": "Libra",
        "sign_symbol": "♎",
        "degree": "21°01'01\" Libra",
        "retrograde": false,
        "element": "Air"
      },
      {
        "planet": "Moon",
        "symbol": "☽",
        "sign": "Sagittarius",
        "sign_symbol": "♐",
        "degree": "03°48'47\" Sagittarius",
  …

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.

General Transits: Daily

POSTAvailable

https://api.96astro.com/v1/western/western-general-transits-daily

The day's tropical planet positions and the aspects between them, not tied to a chart, with the dominant element and retrograde planets.

Credits
1 credit
Input
Name
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
namestringOptional

Name to print in the reading (optional).

Default: ""

Limits: at most 120 characters

Example: ""

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.

  • name · string
  • date · string
  • planet_positions · array of object
  • current_aspects · array of object
  • dominant_element · string
  • retrograde_planets · array of string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": "Seeker",
    "date": "2026-10-14",
    "planet_positions": [
      {
        "planet": "Sun",
        "name": "Sun",
        "available": true,
        "longitude": 201.017,
        "sign": "Libra",
        "sign_symbol": "♎",
        "degree": "21°01'01\" Libra",
        "degree_in_sign": 21.02,
        "retrograde": false,
        "speed": 0.9907,
        "symbol": "☉"
      },
      {
        "planet": "Moon",
  …

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.

General Transits: Weekly

POSTAvailable

https://api.96astro.com/v1/western/western-general-transits-weekly

Day by day for a week: key aspects, dominant element, retrograde planets and the Moon's sign, not tied to a chart.

Credits
1 credit
Input
Name
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
namestringOptional

Name to print in the reading (optional).

Default: ""

Limits: at most 120 characters

Example: ""

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.

  • name · string
  • week · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": "Seeker",
    "week": [
      {
        "date": "2026-10-14",
        "day_of_week": "Wednesday",
        "key_aspects": [
          {
            "planet1": "Moon",
            "planet1_symbol": "☽",
            "planet2": "Uranus",
            "planet2_symbol": "♅",
            "aspect": "Opposition",
            "symbol": "☍",
            "nature": "Polarizing",
            "orb": 0.35,
            "exact_angle": 179.65,
            "meaning": "☽ Moon polarizes and confronts ♅ Uranus — emotions, instincts, and inner needs opposition with rebellion, innovation, and sudden change."
          },
  …

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.

General Transits: Monthly

POSTAvailable

https://api.96astro.com/v1/western/western-general-transits-monthly

Week by week for a month: key aspects, dominant element, retrograde planets and the Moon's sign, not tied to a chart.

Credits
1 credit
Input
Name
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
namestringOptional

Name to print in the reading (optional).

Default: ""

Limits: at most 120 characters

Example: ""

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.

  • name · string
  • weeks · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": "Seeker",
    "weeks": [
      {
        "week_starting": "2026-10-14",
        "key_aspects": [
          {
            "planet1": "Moon",
            "planet1_symbol": "☽",
            "planet2": "Uranus",
            "planet2_symbol": "♅",
            "aspect": "Opposition",
            "symbol": "☍",
            "nature": "Polarizing",
            "orb": 0.35,
            "exact_angle": 179.65,
            "meaning": "☽ Moon polarizes and confronts ♅ Uranus — emotions, instincts, and inner needs opposition with rebellion, innovation, and sudden change."
          },
          {
  …

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.

Sun-Sign Daily Forecast

POSTAvailable

https://api.96astro.com/v1/western/western-sun-daily

A day's forecast for a sun sign: theme, the Moon's sign and phase, aspects to the sign's ruler and the major sky aspects.

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
sun_signstringRequired

Tropical sun sign, e.g. Leo.

Allowed values: AriesTaurusGeminiCancerLeoVirgoLibraScorpioSagittariusCapricornAquariusPisces

Example: Leo

namestringOptional

Default: ""

Limits: at most 120 characters

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 (12)
ValueMeaning
ariesAries
taurusTaurus
geminiGemini
cancerCancer
leoLeo
virgoVirgo
libraLibra
scorpioScorpio
sagittariusSagittarius
capricornCapricorn
aquariusAquarius
piscesPisces

Response · fields in data

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

  • name · string
  • sun_sign · string
  • date · string
  • daily_theme · string
  • dominant_element · string
  • moon_sign_today · string
  • moon_phase_note · string
  • lucky_element · string
  • mode · string
  • ruling_planet · string
  • ruler_aspects · array of object
  • major_sky_aspects · array of object
  • transiting_venus_sign · string
  • transiting_mars_sign · string
  • transiting_mercury_sign · string
  • retrograde_planets · array of string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": "Leo",
    "sun_sign": "Leo",
    "date": "2026-10-14",
    "daily_theme": "Shine brilliantly — creative and romantic day Your ruling planet Sun creates underlying stress with Uranus today (Sesquiquadrate, orb 0.78°) — minor stress energy shapes your focus. The sky's strongest aspect: Neptune ⚹ Pluto (Sextile, orb 0.57°) — harmonious influence on everyone. The Moon in Sagittarius (Fire) shapes the emotional tone. Mercury in Scorpio influences communication. Venus in Scorpio and Mars in Leo colour love and action. Retrograde planets today: Venus, Saturn, Uranus, Neptune, Pluto, North Node — review and reflect rather than launch.",
    "dominant_element": "Fire",
    "moon_sign_today": "Sagittarius",
    "moon_phase_note": "Moon in Sagittarius (Fire) — Emotionally freedom-seeking; optimistic and adventure-hungry",
    "lucky_element": "Fire",
    "mode": "Fixed",
    "ruling_planet": "Sun",
    "ruler_aspects": [
      {
        "planet1": "Sun",
        "planet1_symbol": "☉",
        "planet2": "Uranus",
        "planet2_symbol": "♅",
        "aspect": "Sesquiquadrate",
        "symbol": "⚼",
  …

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.

Sun-Sign Weekly Forecast

POSTAvailable

https://api.96astro.com/v1/western/western-sun-weekly

Day by day for a week for a sun sign: theme, Moon sign, key aspects and aspects to the sign's ruler.

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
sun_signstringRequired

Tropical sun sign, e.g. Leo.

Allowed values: AriesTaurusGeminiCancerLeoVirgoLibraScorpioSagittariusCapricornAquariusPisces

Example: Leo

namestringOptional

Default: ""

Limits: at most 120 characters

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 (12)
ValueMeaning
ariesAries
taurusTaurus
geminiGemini
cancerCancer
leoLeo
virgoVirgo
libraLibra
scorpioScorpio
sagittariusSagittarius
capricornCapricorn
aquariusAquarius
piscesPisces

Response · fields in data

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

  • name · string
  • sun_sign · string
  • ruling_planet · string
  • week · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": "Leo",
    "sun_sign": "Leo",
    "ruling_planet": "Sun",
    "week": [
      {
        "date": "2026-10-14",
        "day_of_week": "Wednesday",
        "theme": "Shine brilliantly — creative and romantic day Sun semi-square Moon (orb 0.58°): minor friction. Key aspect: Moon ☍ Uranus.",
        "dominant_element": "Fire",
        "moon_sign": "Sagittarius",
        "key_aspects": [
          {
            "planet1": "Moon",
            "planet1_symbol": "☽",
            "planet2": "Uranus",
            "planet2_symbol": "♅",
            "aspect": "Opposition",
            "symbol": "☍",
  …

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.

Sun-Sign Match

POSTAvailable

https://api.96astro.com/v1/western/western-sun-sign-match

Compatibility from two sun signs alone: their elements, a score out of a maximum, a verdict and a summary.

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
sign_astringRequired

Allowed values: AriesTaurusGeminiCancerLeoVirgoLibraScorpioSagittariusCapricornAquariusPisces

Example: Leo

sign_bstringRequired

Allowed values: AriesTaurusGeminiCancerLeoVirgoLibraScorpioSagittariusCapricornAquariusPisces

Example: Aquarius

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.

  • sign_a · string
  • sign_b · string
  • element_a · string
  • element_b · string
  • score · integer
  • maximum · integer
  • verdict · string
  • summary · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "sign_a": "Leo",
    "sign_b": "Aquarius",
    "element_a": "Fire",
    "element_b": "Air",
    "score": 90,
    "maximum": 100,
    "verdict": "Highly compatible — Air feeds Fire's enthusiasm with ideas and mental connection",
    "summary": "Leo and Aquarius pair fire with air: Highly compatible — Air feeds Fire's enthusiasm with ideas and mental connection. On sun signs alone this scores 90 out of 100. A full synastry reading needs both birth times and places."
  },
  "meta": {
    "request_id": "req_00000000000000000000",
    "api_version": "v1",
    "credits_used": 0,
    "warnings": [],
    "language": "en"
  }
}

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.

Synastry Chart

POSTAvailable

https://api.96astro.com/v1/western/synastry-chart

Both people's positions, the aspects between their charts, and a compatibility block with score, Sun and Moon compatibility and a verdict.

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
person_aobjectRequired
person_a.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

person_a.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_a.utc_offsetstring | nullOptional

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

Default: null

person_a.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

person_a.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

person_a.ayanamshastringOptional

Default: lahiri

person_a.languagestringOptional

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

Default: en

person_a.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: A

person_bobjectRequired
person_b.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

person_b.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_b.utc_offsetstring | nullOptional

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

Default: null

person_b.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 19.0767

person_b.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 72.8767

person_b.ayanamshastringOptional

Default: lahiri

person_b.languagestringOptional

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

Default: en

person_b.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: B

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.

  • person_a · object
  • person_b · object
  • inter_aspects · array of object
  • compatibility · object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "person_a": {
      "name": "A",
      "sun": "Libra",
      "moon": "Libra",
      "asc": "Aquarius",
      "planets": [
        {
          "planet": "Sun",
          "name": "Sun",
          "available": true,
          "longitude": 204.7272,
          "sign": "Libra",
          "sign_symbol": "♎",
          "degree": "24°43'38\" Libra",
          "degree_in_sign": 24.73,
          "retrograde": false,
          "speed": 0.9932,
          "symbol": "☉"
  …

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.

Synastry Wheel

POSTAvailable

https://api.96astro.com/v1/western/synastry-wheel

Person A's wheel with person B's planets drawn around it, as an SVG drawing, plus the inter-chart aspects and a table of both rings.

Credits
1 credit
Input
Two people's birth details
Output
JSON, SVG
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
person_aobjectRequired
person_a.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

person_a.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_a.utc_offsetstring | nullOptional

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

Default: null

person_a.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

person_a.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

person_a.ayanamshastringOptional

Default: lahiri

person_a.languagestringOptional

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

Default: en

person_a.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: A

person_bobjectRequired
person_b.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

person_b.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_b.utc_offsetstring | nullOptional

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

Default: null

person_b.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 19.0767

person_b.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 72.8767

person_b.ayanamshastringOptional

Default: lahiri

person_b.languagestringOptional

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

Default: en

person_b.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: B

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.

  • inner_ring · string
  • outer_ring · string
  • houses_shown · string
  • inter_aspects · array of object
  • table · object
  • images · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "inner_ring": "A",
    "outer_ring": "B",
    "houses_shown": "A",
    "inter_aspects": [
      {
        "person_a_planet": "Pluto",
        "person_b_planet": "Uranus",
        "aspect": "Sextile",
        "symbol": "⚹",
        "nature": "Harmonious",
        "orb": 0.15,
        "meaning": "Person A's Pluto harmoniously supports Person B's Uranus — transformation, power, death, and rebirth sextile with rebellion, innovation, and sudden change."
      },
      {
        "person_a_planet": "Neptune",
        "person_b_planet": "Sun",
        "aspect": "Sextile",
        "symbol": "⚹",
  …

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.

Synastry Aspects

POSTAvailable

https://api.96astro.com/v1/western/synastry-aspects

Inter-chart aspects between two people, split into harmonious and challenging, with orb and meaning.

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
person_aobjectRequired
person_a.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

person_a.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_a.utc_offsetstring | nullOptional

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

Default: null

person_a.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

person_a.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

person_a.ayanamshastringOptional

Default: lahiri

person_a.languagestringOptional

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

Default: en

person_a.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: A

person_bobjectRequired
person_b.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

person_b.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_b.utc_offsetstring | nullOptional

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

Default: null

person_b.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 19.0767

person_b.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 72.8767

person_b.ayanamshastringOptional

Default: lahiri

person_b.languagestringOptional

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

Default: en

person_b.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: B

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.

  • person_a · string
  • person_b · string
  • total_inter_aspects · integer
  • harmonious_aspects · array of object
  • challenging_aspects · array of object
  • all_aspects · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "person_a": "A",
    "person_b": "B",
    "total_inter_aspects": 58,
    "harmonious_aspects": [
      {
        "person_a_planet": "Pluto",
        "person_b_planet": "Uranus",
        "aspect": "Sextile",
        "symbol": "⚹",
        "nature": "Harmonious",
        "orb": 0.15,
        "meaning": "Person A's Pluto harmoniously supports Person B's Uranus — transformation, power, death, and rebirth sextile with rebellion, innovation, and sudden change."
      },
      {
        "person_a_planet": "Neptune",
        "person_b_planet": "Sun",
        "aspect": "Sextile",
        "symbol": "⚹",
  …

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.

Synastry Predictions

POSTAvailable

https://api.96astro.com/v1/western/synastry-predictions

A compatibility score and verdict with the love, passion, emotional and identity aspects between two charts and their meanings.

Credits
10 credits
Input
Two people's birth details
Output
JSON
Delivery
Direct response (JSON); PDF via /v1/jobs/pdf
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
person_aobjectRequired
person_a.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

person_a.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_a.utc_offsetstring | nullOptional

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

Default: null

person_a.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

person_a.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

person_a.ayanamshastringOptional

Default: lahiri

person_a.languagestringOptional

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

Default: en

person_a.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: A

person_bobjectRequired
person_b.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

person_b.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_b.utc_offsetstring | nullOptional

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

Default: null

person_b.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 19.0767

person_b.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 72.8767

person_b.ayanamshastringOptional

Default: lahiri

person_b.languagestringOptional

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

Default: en

person_b.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: B

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.

  • person_a · string
  • person_b · string
  • compatibility · object
  • love_aspects · array of object
  • passion_aspects · array of object
  • emotional_aspects · array of object
  • identity_aspects · array of object
  • notes · array of string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "person_a": "A",
    "person_b": "B",
    "compatibility": {
      "score": 68,
      "maximum": 100,
      "verdict": "Good compatibility with some areas needing conscious effort.",
      "sun": {
        "sign_a": "Libra",
        "sign_b": "Pisces",
        "element_a": "Air",
        "element_b": "Water",
        "reading": "Complex — Air's detachment conflicts with Water's emotional intensity"
      },
      "moon": {
        "sign_a": "Libra",
        "sign_b": "Aquarius",
        "reading": "Intellectually vibrant — great communication but may lack emotional depth"
      },
  …

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.

Synastry Compatibility Score

POSTAvailable

https://api.96astro.com/v1/western/synastry-compatibility

A synastry compatibility score with Sun and Moon compatibility, aspect counts and a verdict.

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
person_aobjectRequired
person_a.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

person_a.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_a.utc_offsetstring | nullOptional

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

Default: null

person_a.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

person_a.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

person_a.ayanamshastringOptional

Default: lahiri

person_a.languagestringOptional

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

Default: en

person_a.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: A

person_bobjectRequired
person_b.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

person_b.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_b.utc_offsetstring | nullOptional

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

Default: null

person_b.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 19.0767

person_b.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 72.8767

person_b.ayanamshastringOptional

Default: lahiri

person_b.languagestringOptional

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

Default: en

person_b.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: B

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.

  • person_a · string
  • person_b · string
  • compatibility · object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "person_a": "A",
    "person_b": "B",
    "compatibility": {
      "available": true,
      "score": 68,
      "sun_compatibility": "Complex — Air's detachment conflicts with Water's emotional intensity",
      "moon_compatibility": "Intellectually vibrant — great communication but may lack emotional depth",
      "sun_element_a": "Air",
      "sun_element_b": "Water",
      "sun_sign_a": "Libra",
      "sun_sign_b": "Pisces",
      "moon_sign_a": "Libra",
      "moon_sign_b": "Aquarius",
      "harmonious_aspects": 25,
      "challenging_aspects": 18,
      "total_inter_aspects": 58,
      "verdict": "Good compatibility with some areas needing conscious effort."
    }
  …

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.

Synastry: Career

POSTAvailable

https://api.96astro.com/v1/western/synastry-career

Career compatibility from synastry: a score and band, a summary and narrative, the significators used and the supportive and testing inter-chart aspects.

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
person_aobjectRequired
person_a.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

person_a.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_a.utc_offsetstring | nullOptional

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

Default: null

person_a.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

person_a.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

person_a.ayanamshastringOptional

Default: lahiri

person_a.languagestringOptional

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

Default: en

person_a.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: A

person_bobjectRequired
person_b.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

person_b.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_b.utc_offsetstring | nullOptional

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

Default: null

person_b.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 19.0767

person_b.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 72.8767

person_b.ayanamshastringOptional

Default: lahiri

person_b.languagestringOptional

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

Default: en

person_b.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: B

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.

  • domain · string
  • domain_label · string
  • person_a · string
  • person_b · string
  • score · integer
  • band · string
  • summary · string
  • narrative · string
  • significators · array of string
  • supportive_aspects · array of object
  • testing_aspects · array of object
  • counts · object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "domain": "career",
    "domain_label": "Career & shared ambition",
    "person_a": "A",
    "person_b": "B",
    "score": 68,
    "band": "Supportive",
    "summary": "On how you build, decide and take responsibility together, A and B score 68 out of 100 -- more helpful than not. This reads 11 supportive and 12 testing contacts between the planets that govern this area (Sun, Saturn, Jupiter, Mars, Mercury).",
    "narrative": "The strongest support comes from A's Neptune sextile B's Sun (harmonious, orb 0.3 degrees), which eases dreams, illusion, spirituality, and dissolution here. The main friction is A's Jupiter opposition B's Mars (polarizing, orb 0.9 degrees), which strains expansion, wisdom, luck, and growth here. Support and friction are close to balanced here, which usually reads as an area that works well when both of you are attending to it and drifts when neither is.",
    "significators": [
      "Sun",
      "Saturn",
      "Jupiter"
    ],
    "supportive_aspects": [
      {
        "person_a_planet": "Neptune",
        "person_b_planet": "Sun",
        "aspect": "Sextile",
  …

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.

Synastry: Finance

POSTAvailable

https://api.96astro.com/v1/western/synastry-finance

Finance compatibility from synastry: a score and band, a summary and narrative, the significators used and the supportive and testing inter-chart aspects.

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
person_aobjectRequired
person_a.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

person_a.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_a.utc_offsetstring | nullOptional

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

Default: null

person_a.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

person_a.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

person_a.ayanamshastringOptional

Default: lahiri

person_a.languagestringOptional

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

Default: en

person_a.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: A

person_bobjectRequired
person_b.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

person_b.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_b.utc_offsetstring | nullOptional

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

Default: null

person_b.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 19.0767

person_b.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 72.8767

person_b.ayanamshastringOptional

Default: lahiri

person_b.languagestringOptional

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

Default: en

person_b.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: B

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.

  • domain · string
  • domain_label · string
  • person_a · string
  • person_b · string
  • score · integer
  • band · string
  • summary · string
  • narrative · string
  • significators · array of string
  • supportive_aspects · array of object
  • testing_aspects · array of object
  • counts · object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "domain": "finance",
    "domain_label": "Money & material security",
    "person_a": "A",
    "person_b": "B",
    "score": 66,
    "band": "Supportive",
    "summary": "On how you value, spend and secure what you share, A and B score 66 out of 100 -- more helpful than not. This reads 14 supportive and 13 testing contacts between the planets that govern this area (Venus, Jupiter, Saturn, Moon, Pluto).",
    "narrative": "The strongest support comes from A's Pluto sextile B's Uranus (harmonious, orb 0.1 degrees), which eases transformation, power, death, and rebirth here. The main friction is A's Jupiter opposition B's Mars (polarizing, orb 0.9 degrees), which strains expansion, wisdom, luck, and growth here. Support and friction are close to balanced here, which usually reads as an area that works well when both of you are attending to it and drifts when neither is.",
    "significators": [
      "Venus",
      "Jupiter",
      "Saturn"
    ],
    "supportive_aspects": [
      {
        "person_a_planet": "Pluto",
        "person_b_planet": "Uranus",
        "aspect": "Sextile",
  …

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.

Synastry: Intimacy

POSTAvailable

https://api.96astro.com/v1/western/synastry-intimacy

Intimacy compatibility from synastry: a score and band, a summary and narrative, the significators used and the supportive and testing inter-chart aspects.

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
person_aobjectRequired
person_a.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

person_a.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_a.utc_offsetstring | nullOptional

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

Default: null

person_a.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

person_a.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

person_a.ayanamshastringOptional

Default: lahiri

person_a.languagestringOptional

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

Default: en

person_a.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: A

person_bobjectRequired
person_b.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

person_b.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_b.utc_offsetstring | nullOptional

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

Default: null

person_b.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 19.0767

person_b.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 72.8767

person_b.ayanamshastringOptional

Default: lahiri

person_b.languagestringOptional

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

Default: en

person_b.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: B

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.

  • domain · string
  • domain_label · string
  • person_a · string
  • person_b · string
  • score · integer
  • band · string
  • summary · string
  • narrative · string
  • significators · array of string
  • supportive_aspects · array of object
  • testing_aspects · array of object
  • counts · object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "domain": "intimacy",
    "domain_label": "Attraction & intimacy",
    "person_a": "A",
    "person_b": "B",
    "score": 60,
    "band": "Mixed",
    "summary": "On desire, physical rapport and the pull between you, A and B score 60 out of 100 -- workable, with genuine friction. This reads 13 supportive and 13 testing contacts between the planets that govern this area (Venus, Mars, Pluto, Moon).",
    "narrative": "The strongest support comes from A's Pluto sextile B's Uranus (harmonious, orb 0.1 degrees), which eases transformation, power, death, and rebirth here. The main friction is A's Jupiter opposition B's Mars (polarizing, orb 0.9 degrees), which strains expansion, wisdom, luck, and growth here. Support and friction are close to balanced here, which usually reads as an area that works well when both of you are attending to it and drifts when neither is.",
    "significators": [
      "Venus",
      "Mars",
      "Pluto"
    ],
    "supportive_aspects": [
      {
        "person_a_planet": "Pluto",
        "person_b_planet": "Uranus",
        "aspect": "Sextile",
  …

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.

Synastry: Spirituality

POSTAvailable

https://api.96astro.com/v1/western/synastry-spirituality

Spirituality compatibility from synastry: a score and band, a summary and narrative, the significators used and the supportive and testing inter-chart aspects.

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
person_aobjectRequired
person_a.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

person_a.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_a.utc_offsetstring | nullOptional

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

Default: null

person_a.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

person_a.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

person_a.ayanamshastringOptional

Default: lahiri

person_a.languagestringOptional

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

Default: en

person_a.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: A

person_bobjectRequired
person_b.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

person_b.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_b.utc_offsetstring | nullOptional

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

Default: null

person_b.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 19.0767

person_b.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 72.8767

person_b.ayanamshastringOptional

Default: lahiri

person_b.languagestringOptional

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

Default: en

person_b.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: B

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.

  • domain · string
  • domain_label · string
  • person_a · string
  • person_b · string
  • score · integer
  • band · string
  • summary · string
  • narrative · string
  • significators · array of string
  • supportive_aspects · array of object
  • testing_aspects · array of object
  • counts · object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "domain": "spirituality",
    "domain_label": "Meaning & shared belief",
    "person_a": "A",
    "person_b": "B",
    "score": 47,
    "band": "Mixed",
    "summary": "On faith, growth and the search for meaning together, A and B score 47 out of 100 -- workable, with genuine friction. This reads 7 supportive and 14 testing contacts between the planets that govern this area (Jupiter, Neptune, Uranus, Sun).",
    "narrative": "The strongest support comes from A's Pluto sextile B's Uranus (harmonious, orb 0.1 degrees), which eases transformation, power, death, and rebirth here. The main friction is A's Jupiter opposition B's Mars (polarizing, orb 0.9 degrees), which strains expansion, wisdom, luck, and growth here. The testing contacts outweigh the supportive ones, so this area repays being talked about early rather than left to settle itself.",
    "significators": [
      "Jupiter",
      "Neptune",
      "Uranus"
    ],
    "supportive_aspects": [
      {
        "person_a_planet": "Pluto",
        "person_b_planet": "Uranus",
        "aspect": "Sextile",
  …

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.

Synastry: Emotion

POSTAvailable

https://api.96astro.com/v1/western/synastry-emotion

Emotion compatibility from synastry: a score and band, a summary and narrative, the significators used and the supportive and testing inter-chart aspects.

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
person_aobjectRequired
person_a.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

person_a.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_a.utc_offsetstring | nullOptional

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

Default: null

person_a.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

person_a.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

person_a.ayanamshastringOptional

Default: lahiri

person_a.languagestringOptional

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

Default: en

person_a.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: A

person_bobjectRequired
person_b.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

person_b.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_b.utc_offsetstring | nullOptional

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

Default: null

person_b.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 19.0767

person_b.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 72.8767

person_b.ayanamshastringOptional

Default: lahiri

person_b.languagestringOptional

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

Default: en

person_b.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: B

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.

  • domain · string
  • domain_label · string
  • person_a · string
  • person_b · string
  • score · integer
  • band · string
  • summary · string
  • narrative · string
  • significators · array of string
  • supportive_aspects · array of object
  • testing_aspects · array of object
  • counts · object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "domain": "emotion",
    "domain_label": "Emotional life",
    "person_a": "A",
    "person_b": "B",
    "score": 58,
    "band": "Mixed",
    "summary": "On safety, expression and how feeling is exchanged, A and B score 58 out of 100 -- workable, with genuine friction. This reads 10 supportive and 11 testing contacts between the planets that govern this area (Moon, Venus, Neptune, Mercury).",
    "narrative": "The strongest support comes from A's Neptune sextile B's Sun (harmonious, orb 0.3 degrees), which eases dreams, illusion, spirituality, and dissolution here. The main friction is A's Pluto square B's Venus (challenging, orb 1.6 degrees), which strains transformation, power, death, and rebirth here. Support and friction are close to balanced here, which usually reads as an area that works well when both of you are attending to it and drifts when neither is.",
    "significators": [
      "Moon",
      "Venus",
      "Neptune"
    ],
    "supportive_aspects": [
      {
        "person_a_planet": "Neptune",
        "person_b_planet": "Sun",
        "aspect": "Sextile",
  …

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.

Synastry: Everything

POSTAvailable

https://api.96astro.com/v1/western/synastry-full

Compatibility, all five domain readings ranked (career, finance, intimacy, spirituality, emotion) and the sun-sign match, in one call.

Credits
10 credits
Input
Two people's birth details
Output
JSON
Delivery
Direct response (JSON); PDF via /v1/jobs/pdf
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
person_aobjectRequired
person_a.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

person_a.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_a.utc_offsetstring | nullOptional

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

Default: null

person_a.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

person_a.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

person_a.ayanamshastringOptional

Default: lahiri

person_a.languagestringOptional

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

Default: en

person_a.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: A

person_bobjectRequired
person_b.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

person_b.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person_b.utc_offsetstring | nullOptional

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

Default: null

person_b.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 19.0767

person_b.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 72.8767

person_b.ayanamshastringOptional

Default: lahiri

person_b.languagestringOptional

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

Default: en

person_b.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: B

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.

  • person_a · string
  • person_b · string
  • compatibility · object
  • sun_sign_match · object
  • domains · array of object
  • aspect_count · integer

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "person_a": "A",
    "person_b": "B",
    "compatibility": {
      "score": 68,
      "maximum": 100,
      "verdict": "Good compatibility with some areas needing conscious effort.",
      "sun": {
        "sign_a": "Libra",
        "sign_b": "Pisces",
        "element_a": "Air",
        "element_b": "Water",
        "reading": "Complex — Air's detachment conflicts with Water's emotional intensity"
      },
      "moon": {
        "sign_a": "Libra",
        "sign_b": "Aquarius",
        "reading": "Intellectually vibrant — great communication but may lack emotional depth"
      },
  …

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.

Western Bulk Match

POSTAvailable

https://api.96astro.com/v1/western/synastry-bulk

One person scored against many candidates, paged: score, verdict and aspect counts per candidate; candidates without a birth time are marked approximate.

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
personobjectRequired
person.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

person.timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

person.utc_offsetstring | nullOptional

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

Default: null

person.latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

person.longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

person.ayanamshastringOptional

Default: lahiri

person.languagestringOptional

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

Default: en

person.namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: A

candidatesarray of objectsRequired

Up to 50 candidates.

Limits: 1 to 50 items

candidates[].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

candidates[].timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

candidates[].utc_offsetstring | nullOptional

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

Default: null

candidates[].latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 19.0767

candidates[].longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 72.8767

candidates[].ayanamshastringOptional

Default: lahiri

candidates[].languagestringOptional

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

Default: en

candidates[].namestringOptional

Name to print in readings.

Default: ""

Limits: at most 120 characters

Example: B

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.

  • name · string
  • candidates_submitted · integer
  • scored · integer
  • failed · integer
  • errors · array
  • page · integer
  • page_size · integer
  • pages · integer
  • has_more · boolean
  • approximate_rows · integer
  • results · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "name": "A",
    "candidates_submitted": 1,
    "scored": 1,
    "failed": 0,
    "errors": [],
    "page": 1,
    "page_size": 1,
    "pages": 1,
    "has_more": false,
    "approximate_rows": 0,
    "results": [
      {
        "index": 0,
        "name": "B",
        "ok": true,
        "score": 68,
        "verdict": "Good compatibility with some areas needing conscious effort.",
        "sun": "Pisces",
  …

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.