Back to blog

October 24, 2026

·

OpenEphemeris Team

How to Check How Much a Chart Depends on the Birth Minute

Send a stated birth moment, a place and a time window to POST /ephemeris/time-sensitivity and get every sign and house boundary crossed inside the window, with a stable, fragile or unstable verdict for each fact.

how-toapidevelopersbirth-timeastrology

POST /ephemeris/time-sensitivity answers one question: how much does this chart depend on the minute? It was added in API 4.3.0.

You send the stated birth moment, the place, and a window of uncertainty around the moment. You get back every instant inside the window at which a chart fact changes (the sign of the Ascendant or Midheaven, the sign on a house cusp, the sign or house of a planet), a verdict for each fact, and how close the nearest change lies just outside the window.

It reports sensitivity. It does not estimate the true birth time, and it does not rectify a chart.


When to use it

Use it when the birth time is approximate: "around 9 in the morning", a time rounded to the hour, or a time from memory. Send the window the person is unsure about. Then show the facts that hold across the whole window with confidence, and flag the ones that do not.

It also works as a check before you build on a time that was entered by hand, because it shows which parts of a reading would change if the entry were off by a few minutes.

The request

curl -X POST https://api.openephemeris.com/ephemeris/time-sensitivity \
  -H "X-API-Key: $OPENEPHEMERIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": {
      "birth_datetime": { "iso": "1987-07-15T09:01:00" },
      "birth_location": {
        "latitude": { "decimal": 32.7767 },
        "longitude": { "decimal": -96.797 },
        "timezone": { "iana_name": "America/Chicago" }
      }
    },
    "window": { "minutes_before": 30, "minutes_after": 30 },
    "include": ["angles", "houses", "planets"]
  }'

Fields:

  • subject.birth_datetime (required): the stated birth moment as { "iso": "..." }. A clock time must carry its zone, either in the string (Z or an offset) or in birth_location.timezone.
  • subject.birth_location (required): latitude and longitude, each as { "decimal": ... }, and timezone, for example { "iana_name": "America/Chicago" }. The schema marks all three as required.
  • window (optional): minutes_before and minutes_after, each defaulting to 30. Each must be 0 or more, and together they must be more than 0 and at most 1440 (one day).
  • include (optional): any of angles, houses, planets. The default is all three.
  • configuration.house_system (optional): the house system whose cusps and planet houses are tracked. P is the default. The others are K, O, R, C, E and W.
  • format (optional): json (default) or llm. With llm the timeline and fact rows move into metadata as fixed-width arrays.

The response

This is a real response to the request above, trimmed: 2 of the 4 timeline events and 3 of the 36 facts are shown, and metadata is shortened.

{
  "success": true,
  "window": {
    "nominal_utc": "1987-07-15T14:01:00.000Z",
    "start_utc": "1987-07-15T13:30:59.999Z",
    "end_utc": "1987-07-15T14:31:00.000Z",
    "minutes_before": 30,
    "minutes_after": 30,
    "margin_minutes": 15
  },
  "timeline": [
    {
      "utc": "1987-07-15T13:53:46.904Z",
      "offset_seconds": -433.096,
      "fact": "planets.sun.house",
      "from": "12",
      "to": "11",
      "method": "scan",
      "discontinuity": false,
      "also_changes": []
    },
    {
      "utc": "1987-07-15T14:27:49.746Z",
      "offset_seconds": 1609.746,
      "fact": "houses.cusp_12.sign",
      "from": "Cancer",
      "to": "Leo",
      "method": "scan",
      "discontinuity": false,
      "also_changes": [
        { "fact": "houses.cusp_6.sign", "from": "Capricorn", "to": "Aquarius" }
      ]
    }
  ],
  "facts": [
    {
      "id": "angles.asc.sign",
      "group": "angles",
      "value_at_nominal": "Leo",
      "status": "fragile",
      "changes_in_window": 0,
      "segments": [
        { "start_utc": "1987-07-15T13:30:59.999Z", "end_utc": "1987-07-15T14:31:00.000Z", "value": "Leo" }
      ],
      "nearest_before": null,
      "nearest_after": { "utc": "1987-07-15T14:33:51.416Z", "offset_seconds": 1971.416, "from": "Leo", "to": "Virgo" }
    },
    {
      "id": "angles.mc.sign",
      "group": "angles",
      "value_at_nominal": "Taurus",
      "status": "stable",
      "changes_in_window": 0,
      "segments": [
        { "start_utc": "1987-07-15T13:30:59.999Z", "end_utc": "1987-07-15T14:31:00.000Z", "value": "Taurus" }
      ],
      "nearest_before": null,
      "nearest_after": null
    },
    {
      "id": "planets.sun.house",
      "group": "planets",
      "value_at_nominal": "11",
      "status": "unstable",
      "changes_in_window": 1,
      "segments": [
        { "start_utc": "1987-07-15T13:30:59.999Z", "end_utc": "1987-07-15T13:53:46.904Z", "value": "12" },
        { "start_utc": "1987-07-15T13:53:46.904Z", "end_utc": "1987-07-15T14:31:00.000Z", "value": "11" }
      ],
      "nearest_before": null,
      "nearest_after": null
    }
  ],
  "house_system": { "requested": "P", "effective": "P" },
  "metadata": {
    "algorithm_version": "time_sensitivity_v1",
    "ephemeris_calls": 22,
    "house_evaluations": 182,
    "polar_band": false,
    "resolved_utc": "1987-07-15T14:01:00Z",
    "tz_confidence": "authoritative"
  }
}

How to read it:

  • Each fact has a status. stable means no boundary falls inside the window and none falls in the margin just outside it. fragile means the fact holds across the whole window, but a boundary lies just outside it. unstable means a boundary falls inside the window.
  • In the sample, the Midheaven sign (Taurus) is stable. The Ascendant sign (Leo) is fragile: it holds for the whole window, but it changes to Virgo 1971 seconds (about 33 minutes) after the stated time, which is under 3 minutes past the end of the window. The Sun's house is unstable: the Sun moves from house 12 to house 11 about 7 minutes before the stated time.
  • timeline lists every boundary inside the window, in time order. offset_seconds is the distance from the stated instant, negative before it.
  • segments shows the value the fact held over each stretch of the window.
  • nearest_before and nearest_after give the closest boundary outside the window, within the margin. They are null when there is none.

Cost

2 credits per call, on every plan including the free Explorer tier.

Gotchas

This is a sensitivity report, not a rectifier. It never says what the birth time probably was. It says which facts survive the window you gave it.

The window is elapsed minutes. It is not wall-clock minutes, so a daylight-saving change inside the window does not stretch it. The window plus its margin must lie inside 1550-01-01 to 2650-01-22, or the request is a 422.

The margin is a quarter of the window, up to 60 minutes. It is the stretch just outside the window where a nearby boundary makes a fact fragile. The response reports it as window.margin_minutes. In the sample the window is 60 minutes, so the margin is 15.

Facts are signs and houses, not degrees. The report tracks changes of sign and house. It does not report how far a planet or angle moves, and it does not track aspects. A fact marked stable can still shift by several degrees inside the window without changing sign or house.

One instant can change several facts. When the Ascendant crosses a sign, cusp 1 and cusp 7 change with it. In the sample, one instant changes both cusp 12 and cusp 6, and the second appears under also_changes. Rows in facts that follow another fact carry derived_from. The include filter applies to each change, so asking for houses alone still reports house cusp changes that an angle caused.

House values are strings. value_at_nominal, from, to and segments[].value for a house fact are strings such as "11".

The planet roster is fixed. It is the Sun through Pluto and the true node (planets.true_node). You cannot choose bodies on this endpoint. The geodetic and mundane endpoints use the Mean Node, so do not compare node rows across them.

Boundaries are computed instants, to about a second. You can reproduce one by casting a chart a few seconds either side of it.

Cost grows with the window and the latitude. A window longer than 120 minutes, or a latitude beyond 60 degrees north or south, takes a compute slot. The handler's own measurements are 54 ms at the default window, 0.6 s for a 12-hour window, and about 2 s near the polar circle.

Polar latitudes change the answer. A quadrant house system inside the polar circle is replaced by Porphyry, and house_system.effective says so. Beyond the polar circle the Ascendant is not monotonic: it can move backwards and jump. metadata.warnings carries a code for each case.

Give the birth time a zone. A clock time without a zone is rejected as ambiguous, and a wrong zone shifts the whole window without any error. See A Timestamp Is Not a Moment.