API reference › Western

Composite Chart API

A midpoint composite chart for two people

POST/v1/western/composite

3 credits · Secret key (test or live) · getWesternComposite

Each point is the midpoint of the shorter arc between the two charts. Both birth times are required.

Request body

  • person_a Birth required
    • date string (date) required

      e.g. "1990-08-13"

    • time string

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

    • time_accuracy string

      With "unknown", lagna- and house-dependent fields are omitted and listed in warnings — never filled with a noon default.

      one of exact, approximate, unknown · default "exact"

    • place Coordinates or object or object required

      Coordinates, a place_id from /v1/places/search, or a free-text query. A vague query returns 422 place_ambiguous with candidates; the API never guesses.

      One of:

      1. Coordinates
        Fields
        • latitude number required

          ≥ -90 · ≤ 90

        • longitude number required

          ≥ -180 · ≤ 180

        No other fields are accepted.

      2. object
        Fields
        • place_id string required

        No other fields are accepted.

      3. object
        Fields
        • query string required

          at least 2 characters · at most 120 characters

        No other fields are accepted.

    • timezone string

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

      default "auto"

    No other fields are accepted.

  • person_b Birth required
    • date string (date) required

      e.g. "1990-08-13"

    • time string

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

    • time_accuracy string

      With "unknown", lagna- and house-dependent fields are omitted and listed in warnings — never filled with a noon default.

      one of exact, approximate, unknown · default "exact"

    • place Coordinates or object or object required

      Coordinates, a place_id from /v1/places/search, or a free-text query. A vague query returns 422 place_ambiguous with candidates; the API never guesses.

      One of:

      1. Coordinates
        Fields
        • latitude number required

          ≥ -90 · ≤ 90

        • longitude number required

          ≥ -180 · ≤ 180

        No other fields are accepted.

      2. object
        Fields
        • place_id string required

        No other fields are accepted.

      3. object
        Fields
        • query string required

          at least 2 characters · at most 120 characters

        No other fields are accepted.

    • timezone string

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

      default "auto"

    No other fields are accepted.

  • house_system string

    one of placidus, equal, whole_sign, porphyry · default "placidus"

  • aspects array of string
  • orbs object

    Your own orb in degrees for any aspect, replacing the default and the extra for the Sun and Moon.

    • conjunction number

      ≥ 0 · ≤ 15

    • opposition number

      ≥ 0 · ≤ 15

    • trine number

      ≥ 0 · ≤ 15

    • square number

      ≥ 0 · ≤ 15

    • sextile number

      ≥ 0 · ≤ 15

    • quincunx number

      ≥ 0 · ≤ 15

    • semisextile number

      ≥ 0 · ≤ 15

    • semisquare number

      ≥ 0 · ≤ 15

    • sesquiquadrate number

      ≥ 0 · ≤ 15

    • quintile number

      ≥ 0 · ≤ 15

    • biquintile number

      ≥ 0 · ≤ 15

    No other fields are accepted.

  • options object
    • lang string required

      one of en, hi · default "en"

    No other fields are accepted.

No other fields are accepted.

Response

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

  • frame string required
  • method string required

    one of midpoint

  • house_system string required
  • planets array of object required
    • id string required
    • name string required
    • longitude number required
    • sign string required
    • sign_name string required
    • degree number required
    • formatted string required
    • house integer required
  • angles object required
    • ascendant object required
      Fields
      • longitude number required
      • sign string required
      • sign_name string required
      • degree number required
      • formatted string required
    • midheaven object required
      Fields
      • longitude number required
      • sign string required
      • sign_name string required
      • degree number required
      • formatted string required
  • houses array of object required
    • house integer required
    • longitude number required
    • sign string required
    • sign_name string required
    • degree number required
    • formatted string required
  • aspects array of object required
    • a string required
    • b string required
    • aspect string required

      one of conjunction, opposition, trine, square, sextile, quincunx, semisextile, semisquare, sesquiquadrate, quintile, biquintile

    • angle number required
    • orb number required

Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.

Example request

curl -X POST 'https://api.astrologics.in/v1/western/composite' \
  -H 'Authorization: Bearer al_test_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"person_a":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"person_b":{"date":"1992-03-02","time":"14:10","place":{"latitude":19.076,"longitude":72.8777}}}'
Node.js
const res = await fetch("https://api.astrologics.in/v1/western/composite", {
  method: "POST",
  headers: { Authorization: "Bearer al_test_YOUR_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    "person_a": {
      "date": "1990-08-13",
      "time": "06:30",
      "place": {
        "latitude": 28.6139,
        "longitude": 77.209
      }
    },
    "person_b": {
      "date": "1992-03-02",
      "time": "14:10",
      "place": {
        "latitude": 19.076,
        "longitude": 72.8777
      }
    }
  }),
});
console.log(JSON.stringify(await res.json(), null, 2));
Python
import json
import urllib.error
import urllib.request

body = {
    "person_a": {
        "date": "1990-08-13",
        "time": "06:30",
        "place": {
            "latitude": 28.6139,
            "longitude": 77.209,
        },
    },
    "person_b": {
        "date": "1992-03-02",
        "time": "14:10",
        "place": {
            "latitude": 19.076,
            "longitude": 72.8777,
        },
    },
}

req = urllib.request.Request(
    "https://api.astrologics.in/v1/western/composite",
    method="POST",
    headers={"Authorization": "Bearer al_test_YOUR_KEY", "Content-Type": "application/json"},
    data=json.dumps(body).encode(),
)
try:
    with urllib.request.urlopen(req) as res:
        print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
    print(err.code, err.read().decode())
PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/western/composite');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY', 'Content-Type: application/json'],
    CURLOPT_POSTFIELDS => '{"person_a":{"date":"1990-08-13","time":"06:30","place":{"latitude":28.6139,"longitude":77.209}},"person_b":{"date":"1992-03-02","time":"14:10","place":{"latitude":19.076,"longitude":72.8777}}}',
    CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;

Example response

200 OK · 8,108 characters
{
  "data": {
    "frame": "tropical",
    "method": "midpoint",
    "house_system": "placidus",
    "planets": [
      {
        "id": "sun",
        "name": "Sun",
        "longitude": 61.0349,
        "sign": "gemini",
        "sign_name": "Gemini",
        "degree": 1.0349,
        "formatted": "1°02′ Gemini",
        "house": 10
      },
      {
        "id": "moon",
        "name": "Moon",
        "longitude": 359.807,
        "sign": "pisces",
        "sign_name": "Pisces",
        "degree": 29.807,
        "formatted": "29°48′ Pisces",
        "house": 9
      },
      {
        "id": "mercury",
        "name": "Mercury",
        "longitude": 82.4396,
        "sign": "gemini",
        "sign_name": "Gemini",
        "degree": 22.4396,
        "formatted": "22°26′ Gemini",
        "house": 11
      },
      {
        "id": "venus",
        "name": "Venus",
        "longitude": 37.2796,
        "sign": "taurus",
        "sign_name": "Taurus",
        "degree": 7.2796,
        "formatted": "7°16′ Taurus",
        "house": 10
      },
      {
        "id": "mars",
        "name": "Mars",
        "longitude": 0.0333,
        "sign": "aries",
        "sign_name": "Aries",
        "degree": 0.0333,
        "formatted": "0°02′ Aries",
        "house": 9
      },
      {
        "id": "jupiter",
        "name": "Jupiter",
        "longitude": 139.1223,
        "sign": "leo",
        "sign_name": "Leo",
        "degree": 19.1223,
        "formatted": "19°07′ Leo",
        "house": 1
      },
      {
        "id": "saturn",
        "name": "Saturn",
        "longitude": 301.5082,
        "sign": "aquarius",
        "sign_name": "Aquarius",
        "degree": 1.5082,
        "formatted": "1°30′ Aquarius",
        "house": 6
      },
      {
        "id": "uranus",
        "name": "Uranus",
        "longitude": 281.4949,
        "sign": "capricorn",
        "sign_name": "Capricorn",
        "degree": 11.4949,
        "formatted": "11°29′ Capricorn",
        "house": 6
      },
      {
        "id": "neptune",
        "name": "Neptune",
        "longitude": 285.2753,
        "sign": "capricorn",
        "sign_name": "Capricorn",
        "degree": 15.2753,
        "formatted": "15°16′ Capricorn",
        "house": 6
      },
      {
        "id": "pluto",
        "name": "Pluto",
        "longitude": 229.0032,
        "sign": "scorpio",
        "sign_name": "Scorpio",
        "degree": 19.0032,
        "formatted": "19°00′ Scorpio",
        "house": 4
      },
      {
        "id": "north_node",
        "name": "North Node",
        "longitude": 292.5615,
        "sign": "capricorn",
        "sign_name": "Capricorn",
        "degree": 22.5615,
        "formatted": "22°33′ Capricorn",
        "house": 6
      },
      {
        "id": "south_node",
        "name": "South Node",
        "longitude": 112.5615,
        "sign": "cancer",
        "sign_name": "Cancer",
        "degree": 22.5615,
        "formatted": "22°33′ Cancer",
        "house": 12
      }
    ],
    "angles": {
      "ascendant": {
        "longitude": 124.3861,
        "sign": "leo",
        "sign_name": "Leo",
        "degree": 4.3861,
        "formatted": "4°23′ Leo"
      },
      "midheaven": {
        "longitude": 29.6574,
        "sign": "aries",
        "sign_name": "Aries",
        "degree": 29.6574,
        "formatted": "29°39′ Aries"
      }
    },
    "houses": [
      {
        "house": 1,
        "longitude": 124.3861,
        "sign": "leo",
        "sign_name": "Leo",
        "degree": 4.3861,
        "formatted": "4°23′ Leo"
      },
      {
        "house": 2,
        "longitude": 149.6263,
        "sign": "leo",
        "sign_name": "Leo",
        "degree": 29.6263,
        "formatted": "29°37′ Leo"
      },
      {
        "house": 3,
        "longitude": 178.0159,
        "sign": "virgo",
        "sign_name": "Virgo",
        "degree": 28.0159,
        "formatted": "28°00′ Virgo"
      },
      {
        "house": 4,
        "longitude": 209.6574,
        "sign": "libra",
        "sign_name": "Libra",
        "degree": 29.6574,
        "formatted": "29°39′ Libra"
      },
      {
        "house": 5,
        "longitude": 242.7025,
        "sign": "sagittarius",
        "sign_name": "Sagittarius",
        "degree": 2.7025,
        "formatted": "2°42′ Sagittarius"
      },
      {
        "house": 6,
        "longitude": 274.6522,
        "sign": "capricorn",
        "sign_name": "Capricorn",
        "degree": 4.6522,
        "formatted": "4°39′ Capricorn"
      },
      {
        "house": 7,
        "longitude": 304.3861,
        "sign": "aquarius",
        "sign_name": "Aquarius",
        "degree": 4.3861,
        "formatted": "4°23′ Aquarius"
      },
      {
        "house": 8,
        "longitude": 329.6263,
        "sign": "aquarius",
        "sign_name": "Aquarius",
        "degree": 29.6263,
        "formatted": "29°37′ Aquarius"
      },
      {
        "house": 9,
        "longitude": 358.0159,
        "sign": "pisces",
        "sign_name": "Pisces",
        "degree": 28.0159,
        "formatted": "28°00′ Pisces"
      },
      {
        "house": 10,
        "longitude": 29.6574,
        "sign": "aries",
        "sign_name": "Aries",
        "degree": 29.6574,
        "formatted": "29°39′ Aries"
      },
      {
        "house": 11,
        "longitude": 62.7025,
        "sign": "gemini",
        "sign_name": "Gemini",
        "degree": 2.7025,
        "formatted": "2°42′ Gemini"
      },
      {
        "house": 12,
        "longitude": 94.6522,
        "sign": "cancer",
        "sign_name": "Cancer",
        "degree": 4.6522,
        "formatted": "4°39′ Cancer"
      }
    ],
    "aspects": [
      {
        "a": "jupiter",
        "b": "pluto",
        "aspect": "square",
        "angle": 90,
        "orb": 0.12
      },
      {
        "a": "moon",
        "b": "mars",
        "aspect": "conjunction",
        "angle": 0,
        "orb": 0.23
      },
      {
        "a": "sun",
        "b": "saturn",
        "aspect": "trine",
        "angle": 120,
        "orb": 0.47
      },
      {
        "a": "sun",
        "b": "mars",
        "aspect": "sextile",
        "angle": 60,
        "orb": 1
      },
      {
        "a": "sun",
        "b": "moon",
        "aspect": "sextile",
        "angle": 60,
        "orb": 1.23
      },
      {
        "a": "mars",
        "b": "saturn",
        "aspect": "sextile",
        "angle": 60,
        "orb": 1.47
      },
      {
        "a": "moon",
        "b": "saturn",
        "aspect": "sextile",
        "angle": 60,
        "orb": 1.7
      },
      {
        "a": "mercury",
        "b": "jupiter",
        "aspect": "sextile",
        "angle": 60,
        "orb": 3.32
      },
      {
        "a": "pluto",
        "b": "north_node",
        "aspect": "sextile",
        "angle": 60,
        "orb": 3.56
      },
      {
        "a": "neptune",
        "b": "pluto",
        "aspect": "sextile",
        "angle": 60,
        "orb": 3.73
      },
      {
        "a": "uranus",
        "b": "neptune",
        "aspect": "conjunction",
        "angle": 0,
        "orb": 3.78
      },
      {
        "a": "venus",
        "b": "uranus",
        "aspect": "trine",
        "angle": 120,
        "orb": 4.22
      },
      {
        "a": "venus",
        "b": "saturn",
        "aspect": "square",
        "angle": 90,
        "orb": 5.77
      },
      {
        "a": "neptune",
        "b": "north_node",
        "aspect": "conjunction",
        "angle": 0,
        "orb": 7.29
      },
      {
        "a": "moon",
        "b": "mercury",
        "aspect": "square",
        "angle": 90,
        "orb": 7.37
      },
      {
        "a": "venus",
        "b": "neptune",
        "aspect": "trine",
        "angle": 120,
        "orb": 8
      },
      {
        "a": "sun",
        "b": "north_node",
        "aspect": "trine",
        "angle": 120,
        "orb": 8.47
      }
    ]
  },
  "meta": {
    "request_id": "req_example",
    "api_version": "v1",
    "engine_version": "2026.10.10",
    "mode": "live",
    "credits_charged": 3
  },
  "warnings": []
}
Try it

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

More in Western

Get a free API key Western product page