Skip to content
AstroWay/api v2.130.2 · docs
all systems operational

Calculation Accuracy

AstroWay API uses Swiss Ephemeris (the official C code by Astrodienst, creators of astro.com) — the same engine professional astrologers have trusted for 30+ years inside Solar Fire ($495), Kepler ($995), Astro Gold ($29.99/mo), and Janus. We compile it to WebAssembly and expose it as a REST API, without the middleman markup. Every core calculation endpoint is covered by regression snapshot tests; engine precision is verified through triangulation against three independent sources, plus NASA 5-Millennium Eclipse Catalog:

  • Planet positions: median 0.0013", maximum 0.561" vs the official swetest CGI at Astrodienst (measured 2026-07-29 over 130 samples). Per-body breakdown below
  • Placidus house cusps: 0.000" exact match
  • Eclipses: < 1 minute vs NASA 5-Millennium Eclipse Catalog
  • ACG lines: < 1.5 km at the equator vs swetest
  • Sunrise/sunset: < 10 seconds vs timeanddate.com
  • Moon VOC, ingresses, planet conjunctions: sub-second precision

These are measured numbers, not estimates. The script takes 10 charts spread from 1900 to 2050, asks the live swetest CGI at Astrodienst for the same instants, and compares all 13 bodies we return. 130 samples in total.

BodyMaximum drift
Sun, Venus, Saturn0.001"
Mercury0.002"
true Node0.004"
Mars0.007"
Jupiter0.009"
Moon0.022"
Uranus0.083"
Pluto0.097"
Neptune0.223"
Chiron0.561"
mean Apogee (Lilith)0.000"

Median across all 130 samples: 0.0013".

This page previously carried a blanket ”< 0.1 arcsec” promise. The 2026-07-29 measurement showed Neptune, Pluto and Chiron do not hold it, so the promise was replaced with the measured figures. Chiron and the outer planets drift further because their positions come from the compressed ephemeris set in the WASM build.

You can reproduce this: api-calc/scripts/accuracy-vs-swetest.mjs makes exactly these requests and prints the same table.

Check it yourself. The script behind the numbers above is a public MIT repository: astroway/astrology-accuracy-benchmark. It is not ours-only: an adapter for any other API is about thirty lines, so you can run the same 130 samples against a competitor and compare. A sandbox key is enough.

ComponentValue
LibrarySwiss Ephemeris C code (aloistr/swisseph)
Versionupstream Astrodienst C code
Bindingsswisseph-wasm (WebAssembly, Node.js)
EphemerisDE431 JPL ephemeris (via .se1 files)
FallbackMoshier analytical (for dates outside 1800-2399)
Code sharingShared @/core with app.astroway.info — one engine, two transports

Accuracy is verified through triangulation — comparison against three independent sources:

The official Swiss Ephemeris reference implementation hosted by Astrodienst — the team behind Astro.com, which serves millions of astrologers worldwide. The most authoritative public reference. Our engine is identical (0.00–0.07 arcsec drift).

An independent Python library using pyswisseph bindings instead of our WASM. Confirms that our WASM layer does not distort the data.

A remote Swiss Ephemeris API (sidereal Lahiri). Systemic drift of 8–17 arcsec is caused by different Lahiri ayanamsa formula versions — not by engine accuracy.

Chartvs swetest (Astrodienst)vs Kerykeion (Python)vs Prokerala API
Monroe 19260.00”0.19”16.95” (systemic)
Diana 19610.00”0.69”8.18” (systemic)
Einstein 18790.07”Kerykeion LMT artifact14.96” (systemic)

Each of the core calculation endpoints is covered by frozen snapshot tests on 3 reference charts (Monroe / Diana / Einstein) = 853 snapshots.

The snapshot suite catches:

  • Input-mapping bugs — wrong planet id, UT, house system
  • Post-processing — rounding, unit conversion, sign loss
  • Defaults divergence — mean vs true node, geocentric vs topocentric
  • Schema drift — validation let through a wrong shape
  • Stale deploy — prod dist out of sync with code

Default tolerance: 5e-5° (≈0.18 arcsec) for all numeric fields.

ChartDateMax drift
Marilyn Monroe1926-06-010.00”
Princess Diana1961-07-010.00”
Albert Einstein1879-03-140.07”
ChartASC driftMC driftMax cusp drift
Monroe0.000”0.000”0.000”
Diana0.000”0.000”0.000”
EventNASA maxOurs maxDrift
2025-03-14 Lunar Total06:58 UT06:58 UT0.8 min
2025-03-29 Solar Partial10:47 UT10:47 UT0.5 min
2025-09-07 Lunar Total18:11 UT18:11 UT0.8 min
2025-09-21 Solar Partial19:41 UT19:42 UT1.0 min

All MC/IC/ASC/DSC lines use the correct longitude = RA - GMST formula (Kenneth Bowser standard). Drift from authoritative: < 1.5 km at the equator for all planets.

LocationDateParameterDrift
London2026-04-15Sunrise0.6 sec
London2026-04-15Sunset9 sec

Polar locations (|lat| > 66.5°) automatically return polarState + a warning that regular planetary hours are undefined.

AstroWay uses variable per-planet orbs (MIN-of-two-planets rule), as in ZET9 and astro.com. Default orbs (natal chart):

AspectSunMoonInnerJupiterOuter
Conjunction12°10°
Sextile6.5°
Square10°
Trine12°
Opposition12°10°

Minor aspects (36°, 40°, 45°, 72°, 108°, 135°, 144°) are off by default. Enable explicitly via ALL_ASPECTS.

For |lat| > 66.5° the Placidus/Koch/Regiomontanus systems are mathematically undefined. In that case Swiss Ephemeris automatically falls back to Porphyry, and our API adds a warning:

{
"system": "P",
"warning": "Placidus system is undefined for lat=68.96° (> 66.5°). Swiss Ephemeris fell back to Porphyry..."
}

Regression is checked on every PR through CI:

  • api-calc/tests/endpoints/ — 853 snapshots against reference charts (Monroe / Diana / Einstein) + synastry / composite / davison
  • .github/workflows/api-accuracy.yml — auto-run on PR
  • Triangulation against swetest CGI + Kerykeion — weekly
  • Upstream Swiss Ephemeris monitoring via Dependabot
  • Extreme dates (before 1800 and after 2399): uses Moshier analytical, precision ~0.1” (vs < 0.01” for SWIEPH with DE431 files)
  • True Lilith (id=13) vs Mean Lilith (id=12): up to 12° difference — the default is Mean Lilith (stable behavior), True Lilith is available via planetIds: [13]
  • Topocentric vs geocentric: geocentric by default

Accuracy issues: report via support@astroway.info with chart data + expected reference (from astro.com or similar authoritative source).

Was this helpful?
Suggest an edit

Last updated: