Black Moon Lilith: Why Mean and True Disagree by a Sign

9 min read
Torsten Brinkmann
astrologyblack-moon-lilithnatal-chart

Two astrology APIs can place Black Moon Lilith a full zodiac sign apart. Here is why mean and true osculating lunar apogee diverge by up to 30 degrees, and how to return both from one call.

TL;DR

  • Black Moon Lilith is not a body. It is the lunar apogee, and it has two standard definitions: mean and true (osculating).
  • The two can sit up to 30 degrees apart, a full zodiac sign, which is why two correct astrology APIs print different Lilith signs for the same birth data.
  • Mean Lilith always moves forward. True Lilith can slip into the neighbouring sign and turn retrograde.
  • Return both variants, each with sign, degree, house, speed, and a retrograde flag, in one call to the Astrology API.

A developer ships a natal chart app, a user checks the Black Moon Lilith placement against another app they already trust, and the two disagree by a whole sign. The ticket reads like a calculation bug. It almost never is. Black Moon Lilith carries two legitimate astronomical definitions, and most apps never tell the reader which one they compute. Pick the other definition and the same birth moment can move Lilith into the neighbouring sign. It is the same class of bug behind why two Vedic APIs disagree on identical birth data. This guide explains why the gap exists, how far it can stretch, when true Lilith reverses or jumps a sign, and how to return both versions from a single request so your users can see the difference instead of filing it as a defect.

Why do two astrology APIs return different Black Moon Lilith positions?

Two astrology APIs return different Black Moon Lilith positions because Lilith is not a planet, it is the lunar apogee, and the apogee has two standard definitions. The mean apogee is a smoothed long term average. The true or osculating apogee is the instantaneous value of the real, perturbed orbit. The two can differ by as much as 30 degrees, a full zodiac sign, so two correct engines still report different signs for the same chart.

Cast the same chart for 15 July 1990 at 14:30 in Berlin and the live API places the mean apogee in Scorpio at 28 degrees while the true apogee lands in Sagittarius at 24 degrees, about 26 degrees apart and in adjacent signs. The mean and true split is the dominant cause, not a rounding error. Three smaller factors are often blamed and usually innocent. Ayanamsa does not apply, because Black Moon Lilith is a tropical point. Time precision matters only near a boundary. House system changes the house Lilith occupies, never its sign. When two providers disagree by a sign, assume the mean and true difference first and confirm which variant each one returns.

Ready to build this? Astrology API returns both Lilith variants, sign, degree, house, and retrograde state in one response. See pricing.

What is the difference between mean and true osculating Lilith?

Mean Lilith is the position of the lunar apogee averaged over its monthly wobble. It is a steady point that advances roughly 40 degrees per year and never turns retrograde, which makes it the most widely used Lilith in popular astrology. True or osculating Lilith is the apogee of the instantaneous Kepler ellipse that osculates the genuine orbit of the Moon, so it carries every perturbation the real orbit feels.

Up to 30 degrees of separation between mean and true Black Moon Lilith, enough to place them in adjacent zodiac signs.

The driver is the Sun. Its gravity tugs on the orbit of the Moon through every lunar month, stretching and rotating the ellipse, so the instantaneous apogee races ahead of the mean and then slips behind it. The mean value averages that monthly pull out, while the true value keeps it. Because the true apogee tracks the live ellipse, it swings around the mean by up to 30 degrees and can reverse direction. Neither version is wrong. They answer different questions. Mean Lilith asks where the apogee sits on average. True Lilith asks where it points at this exact instant. An app that wants stability picks mean. An app that wants astronomical precision picks true. An app that wants to be defensible returns both and labels them.

When does true Lilith cross into the next sign or turn retrograde?

True Lilith crosses into a neighbouring sign whenever its oscillation around the mean carries it past a 30 degree cusp, which happens most visibly when the mean apogee already sits within a few degrees of a sign boundary. At that point the exact minute of birth decides the sign, so a chart cast for 06:00 and one for 06:20 can disagree.

Near a sign boundary, true Lilith is birth-time sensitive. A few minutes of uncertainty can flip its sign, so surface the degree and a confidence note rather than presenting the sign as fixed.

True Lilith also turns retrograde. The osculating apogee reverses for short stretches when the swing of the live ellipse pulls the apogee direction backward, so its daily speed goes negative. Mean Lilith never does this. Retrograde motion is not unique to Lilith; see how it reads across the chart in retrograde planets beyond Mercury.

AspectMean LilithTrue (osculating) Lilith
DefinitionAveraged lunar apogeeInstantaneous osculating apogee
MotionAlways directDirect or retrograde
Sign stabilityStableCan shift near a cusp
Best forSteady popular chartsAstronomical precision

How to calculate both Lilith variants from one API call

Resolve coordinates and a daylight-saving-correct timezone with location search first, then POST the birth details to the Lilith endpoint. The response returns an array with the mean apogee first and the true apogee second. Each entry carries the zodiac sign, the degree within that sign, the house, the ecliptic longitude and latitude, the daily speed, a retrograde flag, and a plain language interpretation, so a report can show the gap rather than hide it.

== curl

# 1. Resolve coordinates + DST-correct timezone
curl -s "https://roxyapi.com/api/v2/location/search?q=Berlin" \
  -H "X-API-Key: $ROXY_KEY"

# 2. Black Moon Lilith, mean and true in one call
curl -s -X POST "https://roxyapi.com/api/v2/astrology/lilith" \
  -H "X-API-Key: $ROXY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "date": "1990-07-15",
    "time": "14:30:00",
    "latitude": 52.52,
    "longitude": 13.405,
    "timezone": "Europe/Berlin",
    "houseSystem": "placidus"
  }'

== TypeScript

const res = await fetch("https://roxyapi.com/api/v2/astrology/lilith", {
  method: "POST",
  headers: {
    "X-API-Key": process.env.ROXY_KEY!,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    date: "1990-07-15",
    time: "14:30:00",
    latitude: 52.52,
    longitude: 13.405,
    timezone: "Europe/Berlin",
    houseSystem: "placidus",
  }),
});

const data = await res.json();
const [mean, trueApogee] = data.lilith;
console.log(mean.sign, mean.degree, "house", mean.house);
console.log(trueApogee.sign, "retrograde:", trueApogee.isRetrograde);

== Python

import os, requests

res = requests.post(
    "https://roxyapi.com/api/v2/astrology/lilith",
    headers={"X-API-Key": os.environ["ROXY_KEY"]},
    json={
        "date": "1990-07-15",
        "time": "14:30:00",
        "latitude": 52.52,
        "longitude": 13.405,
        "timezone": "Europe/Berlin",
        "houseSystem": "placidus",
    },
)

mean, true_apogee = res.json()["lilith"]
print(mean["sign"], mean["degree"], "house", mean["house"])
print(true_apogee["sign"], "retrograde:", true_apogee["isRetrograde"])

The response returns the two variants in order, the mean apogee first. Trimmed, the Berlin chart above comes back as:

{
  "houseSystem": "placidus",
  "lilith": [
    { "variant": "mean", "sign": "Scorpio",     "degree": 28.31, "house": 2, "speed":  0.112, "isRetrograde": false },
    { "variant": "true", "sign": "Sagittarius", "degree": 24.47, "house": 2, "speed": -0.053, "isRetrograde": true }
  ]
}

Mean Lilith sits in Scorpio and moves forward. True Lilith has swung 26 degrees ahead into Sagittarius and is retrograde, the exact divergence this post is about, in one response.

Keep the API key on your backend. Never embed it in client side JavaScript, a mobile bundle, or a theme file. Proxy the call through your own server.

The timezone field accepts an IANA name such as Europe/Berlin, which resolves to the daylight-saving-correct offset for the birth date, so you can pass the timezone returned by location search straight through. Positions come from Roxy Ephemeris, verified against NASA JPL Horizons. The open methodology and the public benchmark live on the methodology page.

FAQ

What is Black Moon Lilith in astrology? Black Moon Lilith is the lunar apogee, the point where the orbit of the Moon reaches farthest from Earth. It is not a physical body or an asteroid. In modern astrology it marks the raw, suppressed, and reclaimed self. Because the apogee has two definitions, mean and true, a chart needs to state which one it uses.

Is mean or true Black Moon Lilith more accurate? Neither is more accurate, because they measure different things. Mean Lilith is the averaged apogee and stays stable. True Lilith is the instantaneous osculating apogee and tracks the real orbit, so it can shift sign and turn retrograde. The RoxyAPI astrology API returns both so you can present the steady value and the precise value side by side.

Why does my Black Moon Lilith differ between two apps? The two apps almost certainly compute different variants. One returns mean Lilith and the other returns true osculating Lilith, and those can sit up to 30 degrees apart, a full zodiac sign. Confirm which variant each app uses before treating the difference as an error.

Can Black Moon Lilith be retrograde? True (osculating) Black Moon Lilith can be retrograde, for short stretches, when the osculating ellipse swings the apogee direction backward and its daily speed goes negative. Mean Black Moon Lilith never goes retrograde, because it is a smoothed average that always advances. The RoxyAPI astrology API returns a retrograde flag and the daily speed for each variant.

Does the RoxyAPI astrology API return both Lilith variants in one call? Yes. One POST to the Lilith endpoint returns an array with the mean apogee first and the true apogee second. Each entry includes the sign, degree, house, ecliptic longitude and latitude, daily speed, a retrograde flag, and an interpretation, so a single request gives a report everything it needs to explain the difference.

Which Black Moon Lilith should I show users by default? Show mean Black Moon Lilith by default, because it is the steadier and most widely recognised version in popular astrology, then let advanced users switch to true. The RoxyAPI astrology API returns both variants in one call, so you can default to mean and reveal true on demand without a second request or a second provider.

Conclusion

Black Moon Lilith disagreements are a definition problem, not a math problem, and the fix is transparency: name the variant and show both. Return mean and true in one response, label each, and your users see an astronomical nuance instead of a bug. Start with the Astrology API and the interactive reference, or compare pricing.