Morphemeris DocsBeta

Midpoints & Derived Points

GET /v1/midpoints — Midpoints of every body pair, antiscia, Arabic lots, and Cosmobiology midpoint trees.

Midpoints & Derived Points

Points derived from bodies rather than observed: the midpoint of every body pair, each body's antiscion and contra-antiscion, optionally the Arabic lots, and — on request — midpoint trees on a dial. Location is optional; with it every point gets a house placement and lots become available.

Text
GET  /v1/midpoints
POST /v1/midpoints

Credit cost: 1

The same points are available inside any chart response by adding derived_points=true to /v1/natal-chart, /v1/synastry, /v1/davison, /v1/progressed, /v1/draconic, or /v1/returns. The flag costs nothing extra.

Parameters

ParameterTypeRequiredDefaultDescription
datetimestringOne of datetime or jdISO 8601 UTC datetime
jdnumberOne of datetime or jdJulian Day in UT1
bodiesstringNo"planets"Comma-separated body names
siderealstringNoAyanamsha for sidereal mode
lat, lonnumberOnly for lotsObserver location; enables house placement and lots
systemstringNo"placidus"House system when lat/lon are given
midpointsbooleanNotrueMidpoint of every body pair
antisciabooleanNotrueAntiscion and contra-antiscion of every body
lotsstringNononeComma-separated lot names, or default for the seven Hermetic lots; requires lat/lon
resolutionstringNo"lower"Which candidate wins when two bodies are exactly 180° apart: "lower" or "higher" longitude
treesbooleanNofalseAlso build midpoint trees
modulusnumberNo90Dial modulus for trees: 360 (conjunctions to midpoints), 90 (the Cosmobiology dial), 45 (the Uranian dial)
tree_orbnumberNo1.5Maximum dial orb for a tree hit (0–15)

Response

JSON
{
  "data": {
    "derived_points": [
      { "kind": "midpoint", "name": "sun/moon", "constituents": ["sun", "moon"], "longitude": 296.52, "sign": "Capricorn", "sign_degree": 26.52, "house": 10 },
      { "kind": "antiscion", "name": "sun", "constituents": ["sun"], "longitude": 235.31, "sign": "Scorpio", "sign_degree": 25.31, "house": 8, "declination": -21.04 },
      { "kind": "contra_antiscion", "name": "sun", "constituents": ["sun"], "longitude": 55.31, "sign": "Taurus", "sign_degree": 25.31, "house": 2, "declination": 21.04 },
      { "kind": "lot", "name": "Fortune", "constituents": ["moon", "sun", "ascendant"], "longitude": 12.87, "sign": "Aries", "sign_degree": 12.87, "house": 1 }
    ],
    "trees": [
      {
        "body": "sun",
        "longitude": 304.69,
        "modulus": 90,
        "hits": [
          { "constituents": ["venus", "saturn"], "longitude": 34.12, "orb": 0.57 }
        ]
      }
    ]
  },
  "meta": { "credits_used": 1, "...": "..." }
}
FieldDescription
kindmidpoint, antiscion, contra_antiscion, or lot
name"a/b" for a midpoint, the body for antiscia, the lot's name
constituents[]The bodies the point is built from; a lot lists [body_a, body_b, "ascendant"]
longitude, sign, sign_degreeEcliptic position, like a body's
houseHouse placement when lat/lon were given
declinationAn antiscion shares its body's declination, a contra-antiscion negates it; midpoints and lots have none
trees[]Present when trees=true: one per selected body, hits sorted tightest first; a body with no hits still has a tree

How the points are formed

  • A midpoint is always the shortest-arc midpoint. resolution only matters when the two bodies are exactly 180° apart, where both candidates are equally short.
  • An antiscion is the reflection across the 0° Cancer / 0° Capricorn axis — 180° − λ — so the Sun at 25° Capricorn has its antiscion at 5° Sagittarius. It keeps the body's declination, which is the point of the construction: two bodies in antiscia share the same declination. A contra-antiscion reflects across 0° Aries / 0° Libra (−λ) and negates the declination.
  • Lots use the same formulas and day/night detection as /v1/lots.
  • A midpoint tree lists, for one body, every midpoint of other pairs that falls within tree_orb of it on the dial. On the 90° dial, "on the dial" means conjunct, square, or opposite in the zodiac; on the 45° dial the semi-squares join in.

Examples

Every midpoint and antiscion for the planets

Bash
curl "https://api.morphemeris.com/v1/midpoints?datetime=1990-06-15T18:30:00Z" \
  -H "Authorization: Bearer morphemeris_live_YOUR_KEY"
javascript
const res = await fetch(
  "https://api.morphemeris.com/v1/midpoints?datetime=1990-06-15T18:30:00Z",
  { headers: { Authorization: "Bearer morphemeris_live_YOUR_KEY" } },
);
const { data } = await res.json();
const sunMoon = data.derived_points.find((p) => p.name === "sun/moon");
console.log(sunMoon.sign, sunMoon.sign_degree.toFixed(2));

Midpoint trees on the 90° dial, with houses and lots

Bash
curl "https://api.morphemeris.com/v1/midpoints?datetime=1990-06-15T18:30:00Z&lat=40.7128&lon=-74.006&lots=default&trees=true" \
  -H "Authorization: Bearer morphemeris_live_YOUR_KEY"

Errors

CodeCause
missing_parameterlots without lat and lon
invalid_parameterUnknown resolution, modulus outside (0, 360], tree_orb outside 0–15, or an unknown lot name