Morphemeris DocsBeta

Compute Secondary Progressions

Track the slow evolution of a natal chart using the day-for-a-year method.

Compute Secondary Progressions

Secondary progressions map the planetary movement in the days after birth onto the years of life. The /v1/progressed endpoint handles the date conversion and returns a full progressed chart.

What you need

  • Birth date and time in UTC
  • Birth location (latitude and longitude)
  • Target date — the date you want progressions for

Computing a progressed chart

Get the current progressions for someone born June 15, 1990 in New York:

Bash
curl "https://api.morphemeris.com/v1/progressed?\
datetime=1990-06-15T18:30:00Z&lat=40.7128&lon=-74.006\
&target_datetime=2024-03-20T00:00:00Z" \
  -H "Authorization: Bearer morphemeris_live_YOUR_KEY"
javascript
const res = await fetch(
  "https://api.morphemeris.com/v1/progressed?" + new URLSearchParams({
    datetime: "1990-06-15T18:30:00Z",
    lat: "40.7128", lon: "-74.006",
    target_datetime: "2024-03-20T00:00:00Z",
  }),
  { headers: { Authorization: "Bearer morphemeris_live_YOUR_KEY" } }
);
const { data } = await res.json();

// The progressed datetime (about 34 days after birth for age ~34)
console.log("Progressed to:", data.metadata.datetime);

// Track the progressed Moon
const moon = data.bodies.find(b => b.name === "moon");
console.log(`Progressed Moon: ${moon.sign} ${moon.sign_degree.toFixed(2)}°`);
Python
import requests

res = requests.get(
    "https://api.morphemeris.com/v1/progressed",
    params={
        "datetime": "1990-06-15T18:30:00Z",
        "lat": 40.7128, "lon": -74.006,
        "target_datetime": "2024-03-20T00:00:00Z",
    },
    headers={"Authorization": "Bearer morphemeris_live_YOUR_KEY"},
)
data = res.json()["data"]
moon = next(b for b in data["bodies"] if b["name"] == "moon")
print(f"Progressed Moon: {moon['sign']} {moon['sign_degree']:.2f}°")

Tracking the progressed Moon through signs

The progressed Moon changes sign roughly every 2.5 years. Use batch to track it over several years:

JSON
{
  "requests": [
    { "endpoint": "/v1/progressed", "params": { "datetime": "1990-06-15T18:30:00Z", "lat": 40.7128, "lon": -74.006, "target_datetime": "2022-01-01T00:00:00Z", "bodies": "moon" } },
    { "endpoint": "/v1/progressed", "params": { "datetime": "1990-06-15T18:30:00Z", "lat": 40.7128, "lon": -74.006, "target_datetime": "2023-01-01T00:00:00Z", "bodies": "moon" } },
    { "endpoint": "/v1/progressed", "params": { "datetime": "1990-06-15T18:30:00Z", "lat": 40.7128, "lon": -74.006, "target_datetime": "2024-01-01T00:00:00Z", "bodies": "moon" } },
    { "endpoint": "/v1/progressed", "params": { "datetime": "1990-06-15T18:30:00Z", "lat": 40.7128, "lon": -74.006, "target_datetime": "2025-01-01T00:00:00Z", "bodies": "moon" } },
    { "endpoint": "/v1/progressed", "params": { "datetime": "1990-06-15T18:30:00Z", "lat": 40.7128, "lon": -74.006, "target_datetime": "2026-01-01T00:00:00Z", "bodies": "moon" } }
  ]
}

Comparing progressions to the natal chart

To see how progressed planets interact with natal positions, you can use synastry with the progressed datetime as one of the charts:

Bash
curl "https://api.morphemeris.com/v1/synastry?\
datetime_a=1990-06-15T18:30:00Z&lat_a=40.7128&lon_a=-74.006\
&datetime_b=1990-07-19T13:08:00Z&lat_b=40.7128&lon_b=-74.006" \
  -H "Authorization: Bearer morphemeris_live_YOUR_KEY"

Here datetime_b is the progressed datetime (from the metadata.datetime field of a previous /v1/progressed response).

Tips

  • The progressed Moon is the most useful body to track — it moves about 1° per month and changes sign every ~2.5 years.
  • The progressed Sun moves about 1° per year. A progressed Sun sign change is a major life shift.
  • Watch for progressed planets stationing (changing direction) — these are powerful turning points.
  • The target_datetime must be after the birth datetime. The API returns invalid_progression if it precedes the birth.
  • See Concepts: Derived Charts for background on how progressions work.