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.
GET /v1/composite
POST /v1/compositeCredit cost: 3
Parameters
Uses _a and _b suffixes for the two charts' datetime and location parameters.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
datetime_a | string | One of datetime_a or jd_a | — | Person A: ISO 8601 UTC datetime |
jd_a | number | One of datetime_a or jd_a | — | Person A: Julian Day in UT1 |
lat_a | number | Yes | — | Person A: latitude |
lon_a | number | Yes | — | Person A: longitude |
datetime_b | string | One of datetime_b or jd_b | — | Person B: ISO 8601 UTC datetime |
jd_b | number | One of datetime_b or jd_b | — | Person B: Julian Day in UT1 |
lat_b | number | Yes | — | Person B: latitude |
lon_b | number | Yes | — | Person B: longitude |
bodies | string | No | "planets" | Comma-separated body names |
system | string | No | "placidus" | House system |
sidereal | string | No | — | Ayanamsha for sidereal mode |
resolution | string | No | "nearest" | Midpoint resolution: "nearest" or "far" |
aspects | string | No | Major 7 | Comma-separated aspect types |
orb | number | No | — | Global 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".
{
"data": {
"metadata": {
"source": "composite",
"..."
},
"bodies": [ "..." ],
"houses": { "..." },
"aspects": [ "..." ],
"parallels": [],
"dignities": [ "..." ]
},
"meta": { "..." }
}Examples
Basic composite chart
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"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();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
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"