Morphemeris DocsBeta

Composite Chart

GET /v1/composite — Midpoint composite chart from two natal charts.

Composite Chart

Compute a midpoint composite chart from two natal charts. The composite chart calculates the midpoint of each pair of corresponding planetary positions, creating a single chart that represents the relationship itself.

Text
GET  /v1/composite
POST /v1/composite

Credit cost: 3

Parameters

Uses _a and _b suffixes for the two charts' datetime and location parameters.

ParameterTypeRequiredDefaultDescription
datetime_astringOne of datetime_a or jd_aPerson A: ISO 8601 UTC datetime
jd_anumberOne of datetime_a or jd_aPerson A: Julian Day in UT1
lat_anumberYesPerson A: latitude
lon_anumberYesPerson A: longitude
datetime_bstringOne of datetime_b or jd_bPerson B: ISO 8601 UTC datetime
jd_bnumberOne of datetime_b or jd_bPerson B: Julian Day in UT1
lat_bnumberYesPerson B: latitude
lon_bnumberYesPerson B: longitude
bodiesstringNo"planets"Comma-separated body names
systemstringNo"placidus"House system
siderealstringNoAyanamsha for sidereal mode
resolutionstringNo"nearest"Midpoint resolution: "nearest" or "far"
aspectsstringNoMajor 7Comma-separated aspect types
orbnumberNoGlobal orb override in degrees

Midpoint resolution

When two planets are at 10° and 200°, there are two midpoints: 105° (nearest) and 285° (far). The resolution parameter controls which midpoint is used:

  • "nearest" (default) — The closer of the two midpoints. This is the standard convention used by most astrology software.
  • "far" — The midpoint on the opposite side of the zodiac.

Response

The response has the same structure as /v1/natal-chart, with metadata.source set to "composite".

JSON
{
  "data": {
    "metadata": {
      "source": "composite",
      "..."
    },
    "bodies": [ "..." ],
    "houses": { "..." },
    "aspects": [ "..." ],
    "parallels": [],
    "dignities": [ "..." ]
  },
  "meta": { "..." }
}

Examples

Basic composite chart

Bash
curl "https://api.morphemeris.com/v1/composite?\
datetime_a=1990-06-15T18:30:00Z&lat_a=40.7128&lon_a=-74.006\
&datetime_b=1988-03-22T10:00:00Z&lat_b=51.5074&lon_b=-0.1278" \
  -H "Authorization: Bearer morphemeris_live_YOUR_KEY"
javascript
const params = new URLSearchParams({
  datetime_a: "1990-06-15T18:30:00Z", lat_a: "40.7128", lon_a: "-74.006",
  datetime_b: "1988-03-22T10:00:00Z", lat_b: "51.5074", lon_b: "-0.1278",
});
const res = await fetch(
  `https://api.morphemeris.com/v1/composite?${params}`,
  { headers: { Authorization: "Bearer morphemeris_live_YOUR_KEY" } }
);
const { data } = await res.json();
Python
import requests

res = requests.get(
    "https://api.morphemeris.com/v1/composite",
    params={
        "datetime_a": "1990-06-15T18:30:00Z", "lat_a": 40.7128, "lon_a": -74.006,
        "datetime_b": "1988-03-22T10:00:00Z", "lat_b": 51.5074, "lon_b": -0.1278,
    },
    headers={"Authorization": "Bearer morphemeris_live_YOUR_KEY"},
)
data = res.json()

Using far midpoints

Bash
curl "https://api.morphemeris.com/v1/composite?\
datetime_a=1990-06-15T18:30:00Z&lat_a=40.7128&lon_a=-74.006\
&datetime_b=1988-03-22T10:00:00Z&lat_b=51.5074&lon_b=-0.1278\
&resolution=far" \
  -H "Authorization: Bearer morphemeris_live_YOUR_KEY"