Everything you need to build with Open Ephemeris, in one clear place.
Explore the full API with working payloads, pricing context, and copy-paste examples designed to help you move from first request to production with confidence.
QuickstartAPI key auth
Base URL
https://api.openephemeris.com
Auth — API Key
Use X-OpenEphemeris-API-Key in your app or server. Generate a key from the dashboard to start testing.
Auth — MCP / AI Tools
No key needed. Run npx -y @openephemeris/mcp-server — auto-connects via OAuth Device Auth. Credentials are cached and auto-refresh.
Auth — Remote MCP (Claude Web, ChatGPT)
No local install. Add https://mcp.openephemeris.com/mcp as a custom connector — leave OAuth Client ID and Secret blank. The server uses OAuth 2.1 + PKCE with Dynamic Client Registration; your client handles auth via a browser popup on first connect.
Every endpoint shows its credit cost up front — design with clarity before you write a line of integration code.
Stability
Versioning & Stability
Open Ephemeris is currently on v1. We are committed to API stability so integrations keep working without surprise.
90-Day Notice
No breaking changes will ship without at least 90 days' advance notice via the changelog, docs, and a deprecation response header on affected endpoints.
Deprecation Process
Deprecated features follow three phases: header warning on live responses → docs notice with sunset date → removal. The changelog is the canonical record of all changes.
Changelog
Every notable change is documented in the Changelog, including added endpoints, schema changes, and deprecation timelines.
Trust & Provenance
Why Open Ephemeris
Open Ephemeris calculates the exact positions of planets, the Moon, and other celestial bodies for any moment in time, anywhere on Earth. It is built on the same astronomical data and math libraries used by research observatories. Every result is deterministic — the same input always produces the same output, with no hidden adjustments.
Where the Data Comes From
Planet positions come from NASA JPL's DE440 ephemeris — the same dataset used by space missions and professional observatories. "Powered by NASA JPL" means we use their published planetary tables, not that Open Ephemeris is a NASA product. The calculations are performed by the SuperNOVAS and Calceph open-source libraries, both widely used in academic astronomy. DE440 covers dates from 1550 through 2650 CE with sub-arcsecond precision.
How Precise It Is
Planetary positions are accurate to better than one arcsecond — roughly the width of a coin viewed from two miles away. Earth's orientation data comes from the IERS (the international service that tracks how Earth spins). Every endpoint uses the same math pipeline, so a natal chart calculation and a full astrocartography sweep produce perfectly consistent results.
How Time & Location Work
You provide a date, time, and place. Open Ephemeris converts the date into a Julian Day number (the standard way astronomers count days), applies a correction called ΔT to account for variations in Earth's rotation, and resolves the timezone using the IANA timezone database — the same one your phone uses. Coordinates can be sent as decimal degrees, degree-minute-second strings, or structured objects.
Engine Details
How Calculations Work
Understanding the calculation steps helps you interpret results and explains why Open Ephemeris numbers may differ slightly from other tools.
What Happens When You Send a Request
Date & time — your date is converted to a Julian Day number, then a small correction (ΔT) is applied to translate from clock time to the precise astronomical timescale. This ensures planet positions are computed to the correct fraction of a second.
Planet positions — the NASA DE440 tables are queried for each planet's position on the ecliptic (the plane of Earth's orbit). Positions are measured in degrees along the zodiac, starting from the March equinox point.
Houses & angles — based on your location and house system choice (Placidus by default), the sky is divided into twelve segments. The Ascendant, Midheaven, and other angles are derived from your latitude and sidereal time.
Output format — you receive full-precision JSON by default. Add format=llm to get a compact, AI-friendly format that reduces the response size by 50–75% while keeping all essential information.
Why Results May Differ From Other Tools
If you compare Open Ephemeris results to other astrology software, small differences are normal. Here are the most common reasons:
Different planet tables — Open Ephemeris uses NASA DE440. Many other tools use older ephemeris libraries or DE405 tables. These produce slightly different positions (usually less than a few arcseconds).
Different time corrections — the ΔT value (the difference between clock time and astronomical time) varies between tools, especially for historical dates before precise timekeeping existed.
Different house systems — Placidus is the default in Open Ephemeris. Other tools may default to Koch, Whole Sign, or Equal houses. Switching systems changes house cusps and planet placements.
Western vs. Vedic zodiac — western astrology uses the tropical zodiac (aligned to the seasons). Vedic astrology uses the sidereal zodiac (aligned to the fixed stars), which is currently about 24° behind. Open Ephemeris handles both — vedic endpoints default to the sidereal Lahiri ayanamsa.
Capability Map
Every astrological computation
Explore the breadth of the API across core ephemeris features, predictive timing, astrocartography, and specialized astrological traditions.
Coverage Snapshot13 verticals130+ endpointsPrioritized by implementation value
Ephemeris Core
Start with reliable positions, houses, aspects, and chart fundamentals. This is the base layer most product experiences depend on.
Predictive Timing
Turn celestial motion into actionable timing windows for forecasting, reminders, and ongoing user guidance.
Electional Astrology
Programmatically discover optimal timing windows with constraint-based searching, moment scoring, and exact phase tracking.
Astrocartography
Add location intelligence by showing where planetary lines are strongest and how places compare.
Time & Calendar Intelligence
Keep results aligned with timezone, calendar, and astronomical time standards across regions. Powered by an offline geocoder covering 229,000+ cities worldwide.
Visualization + Delivery
Generate chart visuals and delivery-ready payloads so your UI, exports, and automations ship faster.
Comparative & Relationship
Build richer relationship features with structured synastry and composite outputs instead of static compatibility text.
LLM + Agent Workflows
Integrate clean, compact responses into AI workflows so models can reason faster with lower token cost.
Lunar, Venus & Eclipse Cycles
Track phases, lunations, eclipses, and cycle milestones for event-based planning and notifications.
Human Design + Tradition Systems
Support Human Design chart analysis and traditional system coverage in one integration path.
Eclipse & Advanced Timing
Go deeper with precision eclipse visibility, Besselian elements, and advanced analytical endpoints for forecasting.
Vedic + Chinese Astrology
Compute core Vedic and BaZi outputs with the same API patterns used across the platform.
Agriculture + Tidal Planning
Use practical timing data for farming, marine, and environmental planning workflows.
Vertical 01
Tier 1
Ephemeris Core
Reliable foundation for every product flow
Key capabilities
Natal Chart
Planetary Positions
Aspects Grid
House Systems
Dignities
Retrograde Status
Combustion
Sect + Essential Strength
Precision & Scope
Supported Math & Bodies
Open Ephemeris provides native astronomical and interpretive computations under a unified API surface. No trigonometric or manual post-processing of variables required.
Planetary Bodies
Standard: Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto. Centaurs: Chiron, Pholus — each from its own JPL Horizons kernel. Asteroids: Ceres, Pallas, Juno, Vesta, plus the twelve DE441 perturbers (Iris, Hygiea, Eunomia, Psyche, Euphrosyne, Europa, Cybele, Sylvia, Thisbe, Camilla, Davida, Interamnia) — 16 in total, all from JPL's sb441-n16 kernel. Extended asteroids: Eros, Sappho, Lilith (asteroid), Nessus, Chariklo, Amor, Icarus, Apollo, Adonis, Phaethon, Astraea, Hebe, Flora, Metis, Huya and 26 more — 41 in all, each from its own JPL Horizons kernel. Trans-Neptunian: Eris, Sedna, Makemake, Haumea, Quaoar, Orcus, Ixion, Varuna — each from its own JPL Horizons kernel, verified against JPL truth at every boot. Uranian (Hamburg School): Cupido, Hades, Zeus, Kronos, Apollon, Admetos, Vulkanus, Poseidon — hypothetical bodies computed from James Neely’s revised Witte/Sieggrün element set (Matrix Journal VII, 1980), matching Swiss Ephemeris to under 0.01°.
Angles & Calculated Points
Nodes: True North Node, Mean North Node, True South Node, Mean South Node. Lunar Apogee: Mean Lilith, True Lilith (Osculating), and Interpolated (Natural) Lilith — the last built from the Moon’s real apogee passages. Mathematical Angles: Ascendant, Midheaven (MC), Descendant, Imum Coeli (IC), Vertex, Anti-Vertex, Equatorial Ascendant & Descendant (the “East Point”).
Interpretive Mathematics
Dignities: Domicile, Exaltation, Detriment, Fall. Planetary State: Retrograde, Station Direct, Station Retrograde, Velocity (Daily Motion), Out of Bounds (Declination). Solar Phasis: Combustion (under the sunbeams), Cazimi (in the heart of the sun). Sect: Diurnal (Day chart) and Nocturnal (Night chart) determinations.
House Systems
We natively support 7 distinct topological divisions: Placidus (default), Koch, Whole Sign, Equal, Campanus, Regiomontanus, and Porphyry. Quadrant systems fall back to Porphyry above the polar circle (|lat| ≥ 90° − ε), where their trisection is undefined.
Hermetic Lots (Arabic Parts)
Computed natively with strict adherence to day/night sect reversals: Part of Fortune (Lot of the Moon), Part of Spirit (Lot of the Sun), Part of Necessity (Mercury), Part of Love/Eros (Venus), Part of Courage (Mars), Part of Victory (Jupiter), Part of Nemesis (Saturn).
Fixed Stars
Ecliptic coordinates and transit/natal parans for a curated set of 124 stars — the Behenian 15, the Ptolemaic stars, the four royal stars, and the bright navigational catalogue. Positions carry each star’s own proper motion, not precession alone: Algol, Alcyone, Aldebaran, Rigel, Capella, Castor, Pollux, Sirius, Procyon, Regulus, Spica, Arcturus, Antares, Vega, Altair, Fomalhaut, Canopus, Achernar, Deneb, Rigil Kentaurus, and 104 more. Star data from SIMBAD (CDS, Strasbourg); Wenger et al. 2000, A&AS 143, 9.
Convert a place name to latitude/longitude and timezone
Location
/location/autocomplete, /timezone/lookup
Browse supported planets, house systems, or star catalogs
Catalogs
/catalogs/bodies, /catalogs/fixed-stars
MCP Integration
Connect to Your AI Assistant
Open Ephemeris integrates with AI assistants via the Model Context Protocol (MCP). Choose the method that fits your setup.
Local (stdio) — Developers
Install Node.js ≥ 18
Add to your MCP config: npx -y @openephemeris/mcp-server
The server auto-authenticates via browser on first use
Works with Cursor, Windsurf, Zed, Claude Desktop, Claude Code, and any stdio MCP client.
Remote (Streamable HTTP) — Claude Web & Mobile
Open claude.ai → Settings → Connectors → Add custom connector
Paste this URL: https://mcp.openephemeris.com/mcp
Leave OAuth Client ID and Secret blank — do not fill Advanced Settings
Click Connect — sign in (or sign up free in 30s) in the browser popup; tools are discovered automatically
No downloads. No Node.js. OAuth 2.1 + PKCE with Dynamic Client Registration per MCP 2025-11-25 Streamable HTTP spec. Custom connectors require a paid Claude plan (Pro or higher); on Claude Desktop and Claude Code, all plans work.
AI Skills — Interpretation Packs
Download free skill packs (natal charts, timing, compatibility, Human Design, Chinese & Vedic) that teach any AI assistant to interpret Open Ephemeris data like a professional astrologer.
Upload to Claude via Settings → Skills. For other LLMs, use the .md content as a system prompt.
Click Install plugin and approve the sign-in — that creates your free account
Type @Open Ephemeris in any chat
Same server, same tools as Claude — the interactive chart apps render inline in ChatGPT too. Developer Mode still accepts https://mcp.openephemeris.com/mcp over OAuth if you prefer to add it by hand.
We maintain a public repository of copy-paste ready scripts spanning Python, TypeScript, and Shell. Whether you are fetching raw astrocartography geoJSON for a map, requesting JSON-LD LLM context, or testing Human Design transits locally, our examples repository gets you to production faster.
Every endpoint has a minimum tier. Explorer-tier endpoints are available to all authenticated users (including the free plan). Higher-tier endpoints return a structured 403 error with upgrade response with upgrade instructions if your plan doesn't include them.
When your plan changes, the new tier takes effect within 45 seconds for API key users and within 60 seconds for JWT (session) users. During that brief window, the previous tier may still apply. If you need to force an immediate refresh, generate a new API key from the dashboard. Cached API responses expire after 120 seconds.
Exploring the API?
Explorer accounts start with 150 free credits. Need more to finish testing? Add credits from $5 — no subscription required, nothing recurring unless you turn on auto top-up, and credits never expire.
Find ACG lines closest to a geographic location.
Supports two modes:
1. **Proximity mode** (recommended): Provide `query_lat` and `query_lon` in the request body to find lines near any arbitrary point. Optionally set `radius_deg` (default: 3.0, max: 90). Returns features sorted by distance (closest first) with `min_distance_deg` and `min_distance_km` in each feature's properties.
2. **Birthplace fallback**: If `query_lat`/`query_lon` are omitted but `natal.birthplace_lat`/`natal.birthplace_lon` are present, those coordinates are used as the query location.
3. **Unfiltered mode** (backward-compatible): If neither query location nor natal birthplace is provided, all computed features are returned unfiltered.
New request fields (all optional):
- `query_lat` (float): Latitude of the query point (-90 to 90)
- `query_lon` (float): Longitude of the query point (-180 to 180)
- `radius_deg` (float): Proximity radius in degrees (1° ≈ 111 km). Default: 3.0
Find exact geographic points where two ACG lines intersect.
This is a novel feature — no other public ACG API provides crossing
points as structured data. Returns GeoJSON Point features.
Response packaging is stable: `type=FeatureCollection`, `features` is always an array (possibly empty), and `crossing_count` matches the feature count.
Compute declination parallel and contra-parallel latitude bands.
A NOVEL feature — no other ACG tool maps declination parallels
geographically. Returns horizontal GeoJSON lines where two bodies
share (parallel) or oppose (contra-parallel) declination.
Current endpoint contract uses a fixed 1.5° orb (DefaultDeclinationOrb). No `max_orb` query parameter is accepted on this route.
Calculates Astrocartography (ACG) geometry exclusively for the seven classical Hermetic Lots (Lot of Fortune, Spirit, Eros, Necessity, Courage, Victory, and Nemesis).
### Astrological & Mathematical Geometry
Hermetic Lots are sensitive mathematical points derived from the natal Ascendant and two planetary positions (e.g., Day Fortune = Ascendant + Moon − Sun). Unlike planets, their ecliptic longitude shifts with the observer's natal birthplace, so `natal.birthplace_lat` and `natal.birthplace_lon` are **required** fields for this endpoint.
The engine converts each lot's ecliptic longitude to equatorial coordinates (Right Ascension and Declination) using the standard ecliptic-to-equatorial transformation, then runs those coordinates through the same angular line generators used for all ACG bodies.
### Line Types Returned
All four standard angular line types are returned for each lot:
- **MC** — Meridian where the lot culminates (2-point vertical meridian)
- **IC** — Anti-culmination meridian, 180° opposite the MC (2-point vertical meridian)
- **AC** — Horizon curve where the lot's equivalent point rises (181-point sinusoidal arc)
- **DC** — Horizon curve where the lot's equivalent point sets (181-point sinusoidal arc)
Use the `options.line_types` field to restrict output to a subset (e.g., `["MC", "IC"]`).
### Sect Awareness
Sect (day/night chart) is determined from the Sun's actual altitude at the natal birthplace and time. The day and night formulas are applied accordingly — e.g., Fortune uses `ASC + Moon − Sun` for day charts and `ASC + Sun − Moon` for night charts.
Compute astrocartography lines for all N(N-1)/2 body-pair midpoints.
Uses short-arc RA averaging in equatorial space, then runs each virtual
midpoint body through the standard MC/IC/AC/DC generators.
Returns MIDPOINT_MC, MIDPOINT_IC, MIDPOINT_AC, MIDPOINT_DC line types.
Returns the 8 Wheel of the Year events (4 cross-quarters + 4 cardinal points) calculated using true apparent solar longitude from JPL DE440. Cross-quarter dates are the true midpoints between solstices and equinoxes, NOT the traditional Gregorian approximations. 🤖 AI-optimized output available — add `format=llm` to reduce payload ~45%. **Pricing:** 5 credits — one year, 8 events (the transit-search 1-year bracket).
Returns the current state of the 18.6-year lunar nodal cycle. Identifies Major Standstill (Moon reaches ±28.6° declination) and Minor Standstill (Moon limited to ±18.3°) epochs. The most recent Major Standstill is circa 2025.4. **Pricing:** 2 credits — a single point-in-time lookup.
8-Phase Lunar Classification + Next Principal Phases
Returns the current 8-phase lunar phase classification (not just 4), illumination fraction, Moon age in hours, and the next 4 principal phase moments (New, First Quarter, Full, Third Quarter). 🤖 AI-optimized output available — add `format=llm` to reduce payload ~45%. **Pricing:** 2 credits — one 30-day lunar cycle (at most 4 exact phase events): the cheapest way to get the exact time of the next New, First Quarter, Full or Third Quarter Moon. New and Full Moon events carry the Moon's distance and supermoon / micromoon class (`supermoon_definition`), and `apsides` lists the perigees and apogees in the same 30 days.
Catalog-driven identifiers for selectable natal bodies (planets, nodes, Lilith points, major asteroids). This surface is intended for commercial clients and UIs.
Compute the Four Pillars (八字 BaZi) for a birth date and time. Returns the Heavenly Stem and Earthly Branch for each pillar (year, month, day, hour), along with the Day Master — the core element of BaZi self-analysis.
**Heavenly Stems**: 10 stems cycling through 5 elements × 2 polarities.
**Earthly Branches**: 12 branches, each associated with a zodiac animal.
**Day Master (日主)**: The Day Stem's element represents the self.
**Note**: The Year and Month Pillars both roll over at Lì Chūn (立春, ~Feb 4), the traditional solar-term boundary — not at 1 January. A birth before Lì Chūn belongs to the previous sexagenary year. See metadata for the exact solar term used.
**Metering**: 1 unit per call.
Calculate the Heavenly Stem and Earthly Branch for any given Gregorian year (Liu Nian 流年 annual pillar). Optionally returns the NaYin resonance element.
**Metering**: 3 units per call.
Render the Four Pillars (八字 BaZi) as a finished chart image — the same computation as `POST /chinese/bazi`, drawn.
Returns the four pillars, the Day Master, the Five-Element (五行 Wu Xing) balance and the Yong Shen (用神, favourable element) as a single self-contained SVG, a base64 PNG, or a bare SVG blob — no client-side charting required.
**Output** — select with `visual_config.format`:
- `svg` (default): JSON envelope with the SVG string in `visual.data`.
- `png`: JSON envelope with base64 PNG in `visual.data`.
- `svg-raw`: a bare `image/svg+xml` body, no JSON envelope. Convenient for `<img src>`, but it carries no `calculation_metadata`, so the convention echo is unavailable in this mode.
**Conventions**: accepts the same five convention fields as `POST /chinese/bazi` (solar-term boundary, hour-pillar rule, zone handling), and echoes what was used in `calculation_metadata`.
**Metering**: 3 units per call — 1 for the pillar computation plus 2 for the visual render. `credits_used` reports the total actually charged.
Assess the compatibility between two BaZi charts using Six Harmonies (六合), Three Harmonies (三合), Six Clashes (六冲), Six Harms (六害), and Day Master element interactions.
Returns a 0–100 composite score, an assessment label (excellent / good / moderate / challenging), and a list of specific factors found.
**Note**: The 0–100 scoring is an Open Ephemeris algorithmic interpretation. BaZi compatibility analysis is nuanced and multi-layered; this endpoint provides a structured starting point.
**Metering**: 3 units per call.
Calculate the weighted Wu Xing (五行) element balance across all four pillars of a BaZi chart, including hidden stems within the earthly branches.
Returns percentage scores for each of the five elements, Day Master strength (strong/weak/neutral), and the recommended Yong Shen (用神) favourable element.
**Metering**: 3 units per call.
Calculate the eight 10-year Da Yun (大运) luck pillars for a BaZi chart. Starting age is computed from the nearest solar term (Jié) boundary — 3 days from birth = 1 year of starting age (classical Zi Ping rule).
Requires gender to determine whether pillars progress forward or backward through the sexagenary cycle.
**Metering**: 3 units per call.
Return all 24 Jiéqì (节气) solar terms for a given Gregorian year, with exact datetime (UTC) computed from true apparent solar longitude.
Includes both the 12 Jié (节, month-starting terms used in BaZi) and the 12 Qì (气, mid-month terms). Dates are computed via the same ephemeris bridge used by /chinese/bazi.
**Metering**: 3 units per call.
Calculate the Ten Gods (十神 Shí Shén) for a BaZi chart relative to the Day Master. Returns the Ten God label, Chinese name, category, and hidden stem Ten Gods for all four pillars.
The Ten Gods describe the nature of each element in the chart relative to the self (Day Master): Friend, Rob Wealth, Eating God, Hurting Officer, Indirect Wealth, Direct Wealth, Seven Killings, Direct Officer, Indirect Resource, Direct Resource.
**Metering**: 3 units per call.
One Gregorian month of the Chinese calendar: every day (lunar date, pillars, solar terms, Tong Shu basics), the solar terms in the month at their exact instants and the lunar months that overlap it with their new moons.
The calendar is computed from the DE440 new moons and solar terms under the modern rules (dingqi, from the Shixian reform of 1645): a month starts on the Beijing date of its new moon, month 11 holds the winter solstice, and in a 13-month year the first month with no zhongqi is the leap month (2033 gets 闰十一月, as the Hong Kong Observatory lists). Checked against all 2,473 months and 4,800 solar-term dates of the Hong Kong Observatory tables 1901-2100 and 4,129 days of lunar-javascript 1645-2648.
Tong Shu basics per day: the day officer (建除十二神), the 28-lodge day cycle (宿直), the clash and the sha direction. Pillars: the year by Lichun, the month by jie, the day by the sexagenary count; the lunar year's own name (by New Year) is returned separately. Every name has an id, simplified and traditional Chinese and pinyin.
**Pricing:** 3 credits per call (one month).
Converts a Gregorian date to the Chinese lunisolar date, or a lunar date (with leap flag) back to Gregorian, and returns the whole day: lunar year, month and day, the four pillars' year, month and day pairs plus the 12 hour pillars, the solar terms on that date at their exact instants, the jie in force and the next term, and the Tong Shu basics.
The calendar is computed from the DE440 new moons and solar terms under the modern rules (dingqi, from the Shixian reform of 1645): a month starts on the Beijing date of its new moon, month 11 holds the winter solstice, and in a 13-month year the first month with no zhongqi is the leap month (2033 gets 闰十一月, as the Hong Kong Observatory lists). Checked against all 2,473 months and 4,800 solar-term dates of the Hong Kong Observatory tables 1901-2100 and 4,129 days of lunar-javascript 1645-2648.
Tong Shu basics per day: the day officer (建除十二神), the 28-lodge day cycle (宿直), the clash and the sha direction. Pillars: the year by Lichun, the month by jie, the day by the sexagenary count; the lunar year's own name (by New Year) is returned separately. Every name has an id, simplified and traditional Chinese and pinyin.
Range: Chinese New Year 1645 to 2648-12-31. Earlier dates used the mean-term Datong calendar and are a 422.
**Pricing:** 1 credit per call.
The natal Zi Wei Dou Shu (Purple Star Astrology) chart of a birth: the twelve palaces with their stems and roles, the Life and Body palaces, the five-element bureau, the 14 major stars and 14 minor stars with brightness, the four transformations of the year stem and the ten-year cycles.
The lunisolar date is computed from the engine's own new moons and solar terms (birth years 1551 to 2648), not from a table. The schools disagree on the leap-month rule, the day boundary at 23:00, the year boundary and a few transformation stems, so each is an option and every choice is echoed in `conventions`. Where a birth is within minutes of a lunar month boundary, or the late-Zi roll crosses one, a warning says the day numbering may differ from a published table by one day.
Not included in this version: the Zhong Zhou school rules, adjective stars and yearly or monthly overlays.
**Pricing:** 2 credits per call.
Quick lookup of the Chinese zodiac animal, element, and Yin/Yang polarity for any Gregorian year. Also returns the year's Heavenly Stem and Earthly Branch.
The 12-animal cycle: Rat, Ox, Tiger, Rabbit, Dragon, Snake, Horse, Goat, Monkey, Rooster, Dog, Pig.
The 5-element cycle: Wood, Fire, Earth, Metal, Water (each element governs two consecutive years).
**Metering**: 1 unit per call.
Calculate a composite chart from 2–10 subjects. The default method, `davison` (also accepted as `davidson`, the spelling this API originally shipped), computes a true Davison relationship chart: a real chart cast at the mean of the subjects' birth instants and the great-circle midpoint of their birth places, with real planets, angles, and house cusps. `method=midpoint` instead averages each body's longitude across the subjects; a midpoint composite has no Ascendant or Midheaven, so its `angles` and house `cusps` are empty. The response's `method` field reports which was actually computed.
🤖 AI-optimized output available — add `format=llm` to reduce payload ~65%.
Calculate a 2-person Davison-style midpoint. Currently computes the Sun's midpoint longitude only — other planets are not averaged and houses/angles are not returned.
🤖 AI-optimized output available — add `format=llm` to reduce payload ~65%.
Calculate a synastry-style overlay between a natal chart and transits.
- Chart A: natal subject at birth
- Chart B: the same subject/location at transit_datetime (defaults to now UTC)
Lunar eclipse visibility with contact times (penumbral, partial, total). Safe to view without eye protection. 🤖 AI-optimized output available — add `output_format=llm` to reduce payload ~55%.
Find the next solar or lunar eclipse anywhere on Earth after a given date — a forward search, not a point-in-time lookup. No location required; for local visibility and contact times at a specific place, use /eclipse/next-visible instead.
Calculate complete solar eclipse circumstances with Besselian elements and global path for a given date. Returns eclipse classification, Saros series, safety warnings, and uncertainty analysis. 🤖 AI-optimized output available — add `output_format=llm` to reduce payload ~55%.
Local circumstances for a specific observer: magnitude, obscuration, contact times (C1-C4), duration, and sun position. 🤖 AI-optimized output available — add `output_format=llm` to reduce payload ~55%.
Score and analyse the astrological quality of a specific moment. Returns a 0-100 composite viability score derived from essential dignities, aspect quality, sect alignment, and void-of-course status.
Find all retrograde and direct station dates for the specified planets in a given date range. Stations are moments when a planet appears stationary before changing direction.
Find the moments at which bodies cross the Ascendant, Descendant, Midheaven, or Imum Coeli at a geographic point — the time-inverse of astrocartography. Where /acg/power-lines answers "what is angular here at time T", this answers "at what T is this body angular here".
Crossing times are solved on the same in-mundo (equatorial RA/Dec) geometry the ACG line engine draws, so casting the map at a returned moment places the corresponding line through the query point. Circumpolar cases — where a body never rises or never sets at that latitude — return no event rather than an error. Ranges are capped at 366 days and are rejected rather than silently truncated.
**Cost budget:** each body × angle × day is one closed-form root solve (~2 ms of compute). A single request may spend at most 15,000 units (bodies × angles × days); requests over budget are rejected with a 422 naming the arithmetic — reduce bodies, angles, or the date range and issue additional requests. The default body set (7) across all four angles supports a full 366-day range (7 × 4 × 366 = 10,248); 10 bodies × 4 angles × 366 days (14,640) is the widest full-year sweep. For long broad sweeps, slice the range into consecutive start/end windows — results are deterministic, so slices compose exactly.
**Concurrency & backpressure:** heavy endpoints (this one, /acg/*, heatmaps, /electional/find-window and station-tracker) share a per-machine pool of 4 compute slots. When all slots are busy a request waits up to 5 s for admission and is then shed with **429 + Retry-After: 5** (problem type problems/compute_overload) — honor Retry-After with bounded backoff. Admitted work is bounded by a 25 s compute deadline.
**Pricing (by requested span, decided before any compute):** up to 1 month (31 days) = 5, up to 3 months (92 days) = 8, up to 6 months (183 days) = 10, up to 1 year (366 days) = 12 credits. The 366-day range limit applies on every plan. A span above your plan's limit is rejected with 400 `search_span_limit` naming the limit and the bracket that fits — nothing is charged. Any 4xx/5xx outcome is refunded, including a 429 compute_overload shed; rate-limit 429s are refused before anything is charged. Results are capped by `max_results` (reported as `truncated` in the summary).
List all applying and separating aspects active at a given moment, enriched with quality scores. Useful for identifying the astrological texture of a chosen time.
Search a date range for the highest-scoring astrological timing windows. Evaluates moments in 1-hour steps, applies optional constraints (VOC avoidance, retrograde avoidance, lunar phase filter), and returns the top N ranked windows.
**Pricing (by requested span, decided before any compute):** up to 30 days (30 days) = 5, up to 60 days (60 days) = 8, up to 120 days (120 days) = 12 credits. Plan limits: Pro 30 days, Startup 60 days, Scale and above 120 days. An omitted `end_date` defaults to 30 days out and is clamped to your limit rather than rejected. A span above your plan's limit is rejected with 400 `search_span_limit` naming the limit and the bracket that fits — nothing is charged. Any 4xx/5xx outcome is refunded, including a 429 compute_overload shed; rate-limit 429s are refused before anything is charged. At most 20 windows are returned (`max_results`).
Find the moments a transiting body is on a relocated natal angle (AC, DC, MC, or IC) at a geographic point P — "when is this body on MY relocated angle here". A relocated natal angle is a fixed zodiacal (ecliptic-longitude) degree, computed once from the natal instant at P via the same house calculation POST /ephemeris/relocation uses — not a horizon circle that sweeps with time, which is what GET /electional/angle-crossings answers for a bare geographic point instead.
Each result is an orb window: enter (body enters orb_deg of the angle), exact (the crossing moment), and leave (body exits orb_deg). A retrograde triple pass over the same angle produces three separate windows, one per pass, each with its own enter/exact/leave/retrograde — never a single window with multiple exacts. Ranges are capped at 366 days and are rejected rather than silently truncated.
**Pricing (by requested span, decided before any compute):** up to 1 month (31 days) = 5, up to 3 months (92 days) = 8, up to 6 months (183 days) = 10, up to 1 year (366 days) = 12 credits. The 366-day range limit applies on every plan. A span above your plan's limit is rejected with 400 `search_span_limit` naming the limit and the bracket that fits — nothing is charged. Any 4xx/5xx outcome is refunded, including a 429 compute_overload shed; rate-limit 429s are refused before anything is charged. Results are capped by `max_results` (reported as `truncated` in the summary).
Returns compact biodynamic summaries for a date range (max 31 days).
Each day includes: day type, quality score, ascending status, void-of-course
active flag, phase name, and illumination percentage. Designed for building
monthly planning calendars.
🤖 AI-optimized output available — add `format=llm` to reduce payload ~80%.
```bash
GET /ephemeris/agro/calendar?lat=-33.87&lon=151.21&start=2026-03-01&end=2026-03-31&tz=Australia/Sydney
```
Returns a complete Maria Thun biodynamic day profile for a given date and location.
**Includes:**
- Moon sign, element, latitude velocity (ascending/descending)
- Thun day type (root / leaf / flower / fruit) with quality score (0–100)
- Aspect modifiers with explained score impacts (Saturn, Jupiter, Mars, Node)
- Activity recommendations (favorable / unfavorable / optimal tasks)
- Void-of-course window (active status + next window)
- Lunar phase + illumination
- Sunrise, sunset, moonrise, moonset (topocentric; agree with JPL Horizons to within about a minute)
**Zodiac:** Always tropical for Thun classification (per Thun methodology).
**Ephemeris:** DE440.
🤖 AI-optimized output available — add `format=llm` to reduce payload ~70%.
```bash
GET /ephemeris/agro/daily?lat=-33.87&lon=151.21&date=2026-03-15&timezone=Australia/Sydney
```
Returns the current Void of Course (VoC) Moon window for a given Julian Day.
Method 3: scans backward from the Moon's next sign ingress to find the last
major Ptolemaic aspect (conjunction, sextile, square, trine, opposition) to
a traditional planet. The VoC period runs from that aspect until the ingress.
```bash
GET /ephemeris/agro/void-of-course?jd=2451545.0
```
Mechanical endpoint returning Asc/MC/Desc/IC plus Vertex and the Equatorial Ascendant/Descendant (Ebertin EQA/EQD). The equatorial ascendant is also returned under the long-published key `east_point`, which is a synonym for the same point, not a separate one.
Calculate antiscia (mirror points across the Cancer/Capricorn solstice axis) and contra-antiscia for a set of planetary longitudes. Detects hidden conjunctions where one planet's antiscion falls on another planet's natal position. Central to Hellenistic and traditional Western astrology. 🤖 AI-optimized output available — add `format=llm` to reduce payload ~60%.
Analyse ecliptic coordinates to compute equatorial declinations, detect out-of-bounds (OOB) planets, and find declination aspects (parallels and contraparallels).
A planet is out of bounds when its declination exceeds the obliquity of the ecliptic (~23.44°). OOB planets operate outside the Sun's framework and are interpreted as wildcards in contemporary astrology. The Moon is the most frequently OOB body.
Parallels (same declination, same hemisphere) behave like conjunctions; contraparallels (equal but opposite declination) behave like oppositions.
🤖 Agent-first endpoint — pure deterministic math, no ephemeris kernel required.
Build a dispositor tree from a set of planetary sign placements. Each planet is "disposed" by the ruler of the sign it occupies. The algorithm walks these rulership chains to identify final dispositors (planets ruling their own sign) and mutual receptions (pairs disposing each other).
No ephemeris kernel required — pass in pre-computed sign placements. Signs are 0-based in the API (0=Aries … 11=Pisces) and converted internally.
🤖 Agent-first endpoint — pure deterministic math, no ephemeris required.
Calculate positions for fixed stars and galactic reference points at a specific moment. Supports individual names, predefined groups (royal_stars, behenian, ptolemaic, 15_fixed_stars, galactic), and magnitude filtering. Discover the current group list at GET /catalogs/fixed-stars/groups. Returns ecliptic coordinates, proper motion, and metadata for each entry. 🤖 AI-optimized output available — add `format=llm` to reduce payload ~60%.
The geodetic Midheaven, Ascendant, houses and sign zone of a place, and optionally the planets of a moment placed in those houses.
A place's east longitude from Greenwich is the zodiac longitude of its Midheaven (74 degrees W is 286 degrees, 16 Capricorn); the Ascendant and the 12 cusps follow from the latitude with the standard house engine, at a fixed mean obliquity (IAU 2006, J2000) so the same place always gives the same answer. Add date_time with include planets or contacts to read a moment against the place: planets in the geodetic houses and their conjunctions, squares and oppositions to the four angles.
Honest limits: the doctrine rests on secondary sources, the Greenwich anchor is a convention (anchor_offset_deg moves it), and the Midheaven is the ecliptic degree, not the right ascension. A quadrant house system inside the polar circle is replaced by Porphyry and the response says so. A sidereal chart is the tropical geodetic chart shown in the sidereal zodiac, like every other chart on this API.
**Pricing:** 1 credit per call.
Calculate harmonic chart positions by multiplying natal longitudes by a harmonic number N and reducing modulo 360°. Finds conjunctions in the harmonic space to reveal hidden aspect patterns.
Harmonic analysis is the mathematical backbone of aspect theory: the 5th harmonic unfolds quintiles, the 7th reveals septiles, the 9th produces the Vedic navamsa. Higher harmonics expose increasingly subtle geometric relationships invisible in a standard chart wheel.
🤖 Agent-first endpoint — pure deterministic math, no ephemeris required.
Calculate Hermetic lots (Fortune Suite + optional/legacy) for a given datetime and location. Returns normalized lot positions with traditional source references, formulas, and keywords. Includes sect determination (diurnal/nocturnal) and house placements. Follows standalone pattern: direct Julian Day calculation without chart context. Supports format=json|llm via query params.
Calculate the current lunar phase based on Sun-Moon elongation. Returns phase name/angle, illumination percentage, and lunation metadata (New Moon/Full Moon dates, day of lunation, void-of-course status). 🤖 AI-optimized output available — add `format=llm` to reduce payload ~50%.
Calculate zodiacal midpoints from planetary longitudes, detecting conjunctions and oppositions to sensitive points. Supports sort-by-type, tree grouping, and dial-degree formatting. 🤖 AI-optimized output available — add `format=llm` to reduce payload ~65%.
**Uranian**: send `uranian` for Hamburg-style output on a 360, 90, 45 or 22.5 degree dial: the dial sort, a focal midpoint tree and planetary pictures (A/B = C and A/B = C/D), optionally with the eight transneptunian points and the Aries Point. No extra credit. The orb is measured between the two midpoints; the equation residual is twice that, and both are returned.
When can the new crescent Moon be seen from here? For the New Moon (geocentric conjunction) on or after the requested date, and each of the three evenings that start with its local date: sunset, moonset, the lag, Yallop's best time (sunset + 4/9 lag), the Moon's age, ARCL, ARCV, DAZ and the crescent width, then Yallop's q-test (NAO Technical Note 69, zones A-F) and Odeh's V criterion (Experimental Astronomy 18, 2004, zones A-D). An evening on which the Moon sets before the Sun, or the topocentric conjunction is after sunset, is reported as not possible. No evening exists in polar day or night. IMPORTANT: this is an astronomical prediction of whether the crescent can be seen. It is not a religious ruling and does not decide the start of an Islamic month: communities and authorities follow their own rules (local or global sighting, calculation, or a published calendar).
Calculate a comprehensive natal chart with optional enhanced features.
**Features**
- Core: Planetary positions, houses, angles.
- Enhanced: Aspects, patterns, midpoints, harmonics, fixed stars, Arabic parts, dignities.
- Output modes: `full` (default), `simple` (core only), `llm` (AI-optimized).
**Lunar nodes**
- The default roster returns both North Nodes, each labelled: `North Node (Mean)` (mean-node polynomial) and `North Node (True)` (the Moon's osculating ascending node, from its DE440 state vector in the true ecliptic of date; the equivalent of Swiss Ephemeris `SE_TRUE_NODE`). The `true_node` body slug always selects the True (osculating) node, never the Mean node. South Nodes are the matching North Node + 180°.
- `calculation_metadata.lunar_nodes` states the method used for each node and apogee in the response, and `calculation_metadata.node_source` names the node mode in effect. Both are returned on every tier.
**Input Flexibility**
- Coordinates: decimal degrees, DMS strings, or component objects
- DateTime: ISO-8601 strings, Julian Day, or component objects
- Timezone: IANA names, UTC offsets, or auto-detection
Legacy request fields (e.g., custom orb tables) are safely ignored under the simplified contract but remain accepted for compatibility.
🤖 **AI-optimized output** available — add `format=llm` to reduce payload ~75%.
Lightweight endpoint for retrieving a single planet's position at a specific time. Supports both geocentric (default) and topocentric (with latitude/longitude) calculations.
Lightweight endpoint for determining whether a planet is retrograde at a specific time. Returns motion type (direct/retrograde/stationary) and speed data.
What is up tonight from one place: every body's rise, set and upper and lower culmination for the date (Sun, Moon, Mercury to Pluto, each with its own horizon: refraction, the Sun's and Moon's semi-diameter, the dip for `elev`), and for the night that follows (sunset to the next sunrise) which naked-eye planets can be seen and when, their magnitude and elongation, close approaches between the Moon and the planets, and the Moon hiding a planet or a bright star. Positions are topocentric throughout.
Which parts of a chart survive an uncertain birth time. For a stated birth moment, a place and a window, returns every boundary crossed inside the window (Ascendant and Midheaven sign changes, house cusp signs, each planet's sign and house), a per-fact verdict of stable, fragile or unstable, and the nearest boundary just outside the window.
Angles and cusps are solved in closed form and certified against the production house function a second either side; planets use the ephemeris at the window ends with a few real position calls per root, about 20 to 50 in all. Quadrant house systems inside the polar circle fall back to Porphyry and the response says so.
This answers "how much does this chart depend on the minute?" for an agent or a person. It does not estimate the true birth time.
**Pricing:** 2 credits per call.
Returns all current Moon aspects to traditional planets with **applying/separating classification**.
**Performance:** 15-30ms
**Aspect Classification:**
- **Applying:** Moon approaching exact aspect (energies building)
- **Separating:** Moon departing from exact aspect (energies waning)
- Classification based on Moon vs planet speeds (Moon moves ~13°/day, faster than any planet)
**Orb System:** Fixed traditional orbs (no custom orbs in v1)
- Major aspects: Conjunction, Opposition, Square, Trine, Sextile
- Minor aspects: Semi-sextile, Quincunx (optional via include_minor parameter)
**Planets Checked:** Sun, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto
**Use Cases:**
- "What aspects is the Moon making right now?"
- Moon aspect tracking for timing decisions
- Lunar aspect calendars
- Real-time lunar energy awareness
**Example:**
```bash
GET /ephemeris/moon/aspects?datetime=2025-12-11T12:00:00Z&include_minor=false
```
Returns all Moon sign ingress events within a date range.
**Moon Ingress Frequency:** ~13 ingresses per month (Moon changes signs every ~2.5 days)
**Performance:** <5ms (cached), 50-100ms (cache miss)
Cache is **pre-warmed for ±3 months** on startup and **refreshed daily at 00:01 UTC**.
**Cache Strategy:**
- Tropical and sidereal ingresses cached separately (different times due to ~24° ayanamsa offset)
- Redis backend with 30-day TTL
- Rolling 3-month window maintained automatically
- Graceful fallback to live calculation if cache miss
- Startup health check reports cache status
**Use Cases:**
- Monthly lunar calendars
- "Best days for haircuts" timing apps
- Moon sign tracking applications
- Gardening/manifestation by Moon sign
- Electional astrology lookups
**Rate Limiting:** Max 90-day range per query to prevent abuse.
**Example:**
```bash
GET /ephemeris/moon/ingresses?start_date=2025-12-01T00:00:00Z&end_date=2025-12-31T23:59:59Z&zodiac_mode=tropical
```
Returns lunar phase information for a specific datetime.
**Performance:** tens of milliseconds: the perigee/apogee root-finds and the search for the next supermoon and micromoon (up to 16 lunations) dominate
**Phase Names:**
- New Moon
- Waxing Crescent
- First Quarter
- Waxing Gibbous
- Full Moon
- Waning Gibbous
- Last Quarter
- Waning Crescent
**Data Returned:**
- Phase name and illumination percentage (0-100%)
- Sun-Moon elongation angle (0-360°)
- Waxing/waning classification
- Moon age in days (~0-29.53 day cycle)
- Moon distance from Earth (km)
- Moon angular diameter (degrees)
- Previous and next perigee and apogee, exact to about a second, with distances (`apsides`)
- Next New Moon and Full Moon with their distance and supermoon / micromoon class, and the next supermoon and micromoon Full Moons (`supermoon_definition` picks the rule; default `orbit_90`, Espenak's)
**Use Cases:**
- Daily lunar calendars
- Gardening by Moon phase (Full Moon planting, etc.)
- Manifestation/ritual timing (New Moon intentions, Full Moon releases)
- General lunar awareness apps
- Fishing/hunting activity timing
**Example:**
```bash
GET /ephemeris/moon/phase?datetime=2025-12-11T12:00:00Z
```
Returns Void of Course Moon status for a specific datetime using **Method 3 definition**.
**Void of Course (VoC) Definition:**
Moon is VoC when it makes no major aspects (conjunction, opposition, square, trine, sextile)
to traditional planets (Sun through Pluto) before changing zodiac signs.
**Method 3 Logic:**
- VoC period **cannot start before** Moon's last sign ingress
- Searches backwards from next ingress for last major aspect (COQTS)
- If no aspects found, VoC starts at previous ingress (calendar-accurate)
- Uses fixed traditional orbs (no custom orbs in v1)
**Performance:** 20-50ms (aspect search + ingress calculation)
**Use Cases:**
- Electional astrology: "Is now a good time to sign contracts?"
- Daily VoC calendars for timing decisions
- Timing-sensitive decision support tools
**Example:**
```bash
GET /ephemeris/moon/void-of-course?datetime=2025-12-11T12:00:00Z&zodiac_mode=tropical
```
Calculate progressed chart (Secondary, Tertiary, Solar Arc)
Return progressed positions, aspects, and metadata for a subject. Supports Secondary (Naibod), Tertiary (I), Minor, and Solar Arc methods. 🤖 **AI-optimized output** available — add ormat=llm to reduce payload ~70%.
A chart cast for the exact instant of a Sun sign ingress (an equinox or solstice for the cardinal signs) or of the next New or Full Moon, at a place you choose.
The instant is solved from the Sun's apparent longitude (ingress) or the Sun-Moon elongation (lunation), and the response states how close the solved geometry is to the definition. The chart is geocentric and tropical: angles, 12 cusps, the Sun to Pluto and the Mean North Node with houses and retrograde flags, and sect. For an ingress it adds the traditional validity span (by the Ascendant's modality) and the lord-of-the-year candidates as separate labelled facts, plus house rulers; no candidate is called the lord of the year because the sources disagree.
Out of scope in this version: eclipse and great-conjunction events, overlay on a founding chart, and the Moon's applying aspects.
**Pricing:** 2 credits per call.
Every solar and lunar eclipse in a date range whose degree falls within orb of a natal point (planets, angles, nodes, lots), with the exact time and aspect, and, when `location` is given, whether and how it could be seen from there: contact times, magnitude, obscuration and the Sun's or Moon's altitude.
**Pricing (by requested span, decided before any compute):** the transit-search brackets — up to 1 year (367 days) = 5, up to 3 years = 10, up to 5 years = 15, up to 10 years = 25, up to 20 years = 40, up to 40 years = 70 credits; a span above your plan's limit is a 400 `search_span_limit`, nothing charged.
Placidus semi-arc primary directions. Promissors are the Sun through Saturn and their Ptolemaic aspects; significators default to the Ascendant, Midheaven, Sun, Moon and Part of Fortune. Two methods: `placidus_mundane` (the promissor's body, mundane aspects by semi-arc proportion) and `placidus_zodiacal` (the promissor's aspect degree on the ecliptic, without latitude). Every event names the method that produced it and gives the arc, the age under the Ptolemy and Naibod keys, and the date each key implies. Uses the true obliquity of the birth date. Placidus semi-arcs do not exist at or inside the polar circle; such births return 422.
Calculate the nearest return timing (body returns to its natal longitude) near a target datetime.
Supported bodies: Sun–Uranus, Mean Node, Mean/True Lilith.
🤖 AI-optimized output available — add `format=llm` to reduce payload ~65%.
The previous and next times, within 1550-2650, that the slow planets (Jupiter to Pluto, or a subset) all stand again within `orb_deg` of their natal longitudes together, and the closest match on each side of birth whether or not it is within the orb. The search is exhaustive over the range (branch and bound on each body's maximum speed, so no window is skipped); window edges are to the second and the closest instant to 10 seconds. Checked against JPL Horizons. Positions are geocentric apparent longitudes; all times UTC.
**Pricing (by requested span, decided before any compute):** up to 100 years = 5, up to 300 years = 10, up to 1101 years (the whole DE440 range) = 15 credits. Omitting start_date and end_date searches the whole range (15).
Direct the Ascendant (or another releaser) through the Egyptian bounds: circumambulation, directing through the terms (Ptolemy, Tetrabiblos III; Valens, Anthology III). Returns a dated table of periods with the distributor (bound lord) and the partners (planets whose body or ray the directed point meets), and, with target_datetime, the period and partner in force. Arcs are checked against Swiss Ephemeris to 0.1′. All dates are ISO-8601 in the birthplace offset with the IANA `timezone`.
Calculate firdaria (فرادير) — the medieval Persian planetary period system that assigns each of the seven classical planets a fixed number of years as the dominant ruler of life. The 75-year master cycle differs for day births (diurnal) and night births (nocturnal). Each major period is subdivided into seven sub-periods in Chaldean order.
Firdaria operates independently of signs and houses — it is purely a time-based system making it complementary to profections and transits. Think of it as a 75-year program schedule: knowing your current major and sub-period ruler tells you which planetary archetype is most active in your life right now.
🤖 Agent-first endpoint — pure deterministic math, no ephemeris required.
Calculate annual profections — the foundational Hellenistic timing technique that advances one zodiac sign per birthday from the natal Ascendant. Returns the profected sign, activated house, time lord planet, element, modality, and a full multi-year timeline.
Profections are the simplest and most widely used timing technique in traditional astrology, experiencing a major revival in modern Hellenistic practice. Each year of life activates one whole-sign house from the Ascendant; the ruler of that sign becomes the "time lord" coloring the entire year. Angular years (1st, 4th, 7th, 10th) are typically the most eventful.
🤖 Agent-first endpoint — pure deterministic math, no ephemeris required.
Calculate zodiacal releasing — the Hellenistic timing technique of Vettius Valens (*Anthology* IV), which divides a life into a handful of chapters released from a sensitive Lot (Fortune for body and health, Spirit for career and action).
Each sign releases for its own minor years: Aries 15, Taurus 8, Gemini 20, Cancer 25, Leo 19, Virgo 20, Libra 8, Scorpio 15, Sagittarius 12, Capricorn 27, Aquarius 30, Pisces 12 — a full circuit of 211. Levels run on the traditional clock: a level-1 "year" is 360 days and a level-2 "month" is 30, each sub-level exactly one twelfth of the level above.
Angular periods (1st, 4th, 7th, 10th from the Lot) mark peak chapters. The loosing of the bond is an event in the sub-period sequence, not a property of a sign: when the level-2 walk would return to the sign its general period began on, it jumps to the sign opposite that period and carries on forward. Only general periods longer than one circuit (211 months ≈ 17.58 years) can contain one — Gemini, Cancer, Leo, Virgo, Capricorn and Aquarius.
When the Lots of Fortune and Spirit fall in the same sign, releasing from Spirit begins one sign forward (Valens IV, 4:7); `spirit_advanced` reports when that rule fired.
Returns L1 general periods with their L2 sub-periods as absolute dates, peak-period identification, angular/loosing flags, and the active period at the target datetime.
🤖 Agent-first endpoint — pure deterministic math, no ephemeris required.
Return a full chart payload for a given moment (transit chart). Includes all supported bodies: Sun–Pluto (core) plus Chiron, Mean/True North & South Nodes, Mean/True Lilith (Black Moon), and Ceres (extended bodies — gracefully omitted when ephemeris kernels are unavailable). Also returns houses/angles, aspects (major; minor opt-in), and a `body_categories` map for UI rendering. This is a chart snapshot endpoint (not a transit event search). 🤖 AI-optimized output: add `format=llm` to reduce payload ~70%.
Calculate when a planet transits to a specific longitude degree.
**Features:**
- Sub-minute precision for transit timing
- Retrograde motion handling with multiple crossings
- Duration calculations (approach and separation)
- All traditional and modern planets supported
**Performance:** <50ms for single transit calculations
Search for various types of transit events within a date range.
**Features:**
- Exact crossings of target degrees, several passes per target (`results`)
- Opt-in orb windows (`orb_deg` / `aspect_orbs`): enter, every exact hit including retrograde re-passes, and leave, per continuous in-orb episode (`windows`), with applying/separating at the range start
- Natal points × aspects as labelled targets (`natal_points`, `aspects`)
- Ranked by significance (`sort=significance`, `limit`, `group=episodes`): "my biggest transits this year", each hit with its score components (`ranked`)
- Configurable date ranges (plan limits: 1 year on Explorer/PAYG, 5 years on Pro, 10 years on Startup, 40 years on Scale and above)
**Performance:** one sampled track per planet shared by every target; the cost guard counts days × planets × targets.
**Pricing (by requested span, decided before any compute):** up to 1 year (367 days) = 5, up to 3 years (1097 days) = 10, up to 5 years (1828 days) = 15, up to 10 years (3654 days) = 25, up to 20 years (7306 days) = 40, up to 40 years (14611 days) = 70 credits. Plan limits: Explorer/PAYG 1 year, Pro 5 years, Startup 10 years, Scale and Enterprise 40 years. A span above your plan's limit is rejected with 400 `search_span_limit` naming the limit and the bracket that fits — nothing is charged. Any 4xx/5xx outcome is refunded, including a 429 compute_overload shed; rate-limit 429s are refused before anything is charged. Results are capped at 1000 transit events per response; past that the earliest 1000 are returned with `truncated: true` and `truncation.resume_from` to continue from.
**Deadline:** 30 s of compute on every plan. A search that runs out of time returns the bodies it finished with `truncated: true` (reason `deadline`, the unsearched bodies in `truncation.remaining`); if none finished it returns 503 `compute_timeout`, and the credits are refunded.
Calculate planetary sign ingresses (when planets change zodiac signs).
**Features:**
- Sub-minute precision for ingress timing
- Retrograde status detection
- All traditional and modern planets
- Batch processing for multiple planets
**Performance:** <200ms for batch ingress calculations
Compute Sun-Venus conjunction events for a birth. natal_conjunction is the last conjunction before birth (the natal rule of Arielle Guttman's technique), with its type (inferior/superior) and Morning/Evening Star phase. star_points lists the five conjunctions nearest in time to birth, whichever side they fall on. Each event carries zodiac dignity, the phase Venus enters afterwards, and combustion status. Times are exact to about one second. 🤖 AI-optimized output available — add `format=llm` to reduce payload ~60%.
Find every Sun-Venus conjunction (inferior and superior) in a date range, each computed from the ephemeris to about one second. The range may span up to 36525 days (100 years); a longer range is rejected with 422 rather than silently cut short. Inferior conjunctions are followed by a Morning Star phase, superior by an Evening Star phase (visibility). 🤖 AI-optimized output available — add `format=llm` to reduce payload ~60%.
Compute Venus's 8-year star: the 5 Sun-Venus conjunctions of one type (inferior or superior), about 584 days apart, starting with the first conjunction on or after `date`, which sets the type. 🤖 AI-optimized output available — add `format=llm` to reduce payload ~60%.
Generate a Composite / Relationship Chart.
Analyzes Electromagnetic connection scoring between two charts.
**Pricing:** 3 credits (+2 with include_visual). Available on every plan.
Pairwise Human Design connections for 3 to 12 people, with group aggregates.
Every pair is classified exactly as POST /human-design/composite classifies a pair (electromagnetic, companionship, dominance, compromise), returned as N x N matrices (symmetric, plus directional dominance_from and compromise_from) and, with detail=channels, per-pair channel rows. The group block lists the channels and centers the whole group defines together, the channels formed only by combination and the channels several people define. A person holds a gate when it is active in their Personality or their Design.
This is mechanics, not doctrine: it does not name a Penta, a Wa or a group type and ranks nothing; for more than five people no such rule is published in a citable form. For exactly two people use POST /human-design/composite; for a Penta analysis of 3-5 people use POST /human-design/penta.
**Pricing:** 2 credits per subject — 6 for 3 people, 24 for 12 — read from the request before any compute and refunded on failure. A subject whose birth data cannot be resolved fails the whole call with a 422 that names it; nothing is charged.
Calculate the Human Design chart at the moment a planet opposes its natal position (180°).
Most commonly used for Uranus Opposition (~age 42), Saturn Opposition (~age 14-15, ~44), and Jupiter Opposition (~age 6, ~18, ~30).
Calculate a Human Design chart at the moment any planet returns to its natal longitude.
Supports sun, moon, mercury, venus, mars, jupiter, saturn, uranus, neptune, pluto, chiron, and pholus.
Human Design address for points beyond the 13 bodygraph bodies, at the Personality instant and at the Design instant (88° of solar arc earlier), both at the birth location.
Choose what to compute with `include`: `bodies` (asteroids, Chiron, Lilith, Vertex, the mean node and the Uranian set), `angles` (ASC, DSC, MC, IC), `lots` (the seven Hermetic Lots, cast in the sect of each instant's own chart — Sun above the horizon is a day chart), `stars` (fixed stars, evaluated at each epoch) and `kernel_bodies` (opt-in: the kernel-backed catalog of asteroids, centaurs and trans-Neptunian objects, named as on the /acg endpoints; a requested body whose kernel does not cover the Personality or Design instant refuses the whole request with a 422). `bodies` alone is the default. Stars need `star_groups` (see `GET /catalogs/fixed-stars/groups`), `star_names` (catalog slugs, see `GET /catalogs/fixed-stars`), or both; the result is their union, de-duplicated and in catalog order.
These points never enter the bodygraph: no definition, channels, centers, type, authority or cross. Use `/human-design/chart` for those.
**Access:** any API key can call this route. Every key receives `gate` and `line` for each point. `longitude`, `color`, `tone` and `base` (and a star's ecliptic `latitude`) are returned only on Pro plans and above; on other keys they are omitted and `metadata.deep_fields` is `false`.
**Pricing:** priced by what you ask for, once per request (Personality and Design together): extended bodies 3 credits, angles 1, Hermetic Lots 2, fixed stars 3 per star group plus 1 per named star (capped at 20), kernel bodies 1 per named body capped at 20 (naming none costs 20). The smallest request (angles only) is 1 credit. The price is read from the request before any compute, and a rejected request is refunded.
Generate a Penta (Group Dynamics) Analysis.
Valid for groups of 3 to 5 people.
Focuses on trans-auric forms (BG5).
**Pricing:** 2 credits per member chart — 6 for 3 members, 8 for 4, 10 for 5 — read from the request before any compute.
Personalized Human Design transit overlay.
Overlays the transiting field on a person's natal bodygraph and reports the channels a transit temporarily completes plus any newly-defined centers.
**Pricing:** 3 credits, available on every plan. Set include_visual=true for an overlay bodygraph SVG/PNG (+2 credits).
Human Design transits over a date range.
For each transiting body: every gate it enters and leaves (and optionally every line), with retrograde re-entries marked. With natal gates (a subject or a gate list): every window in which a transiting gate completes one of the person's channels.
Gates are fixed arcs of the 302° wheel, so each entry and exit is an exact degree crossing, found to about a second. Range cap, span brackets and cost guard as /predictive/transits/search.
**Pricing (by requested span, decided before any compute):** up to 1 year (367 days) = 5, up to 3 years (1097 days) = 10, up to 5 years (1828 days) = 15, up to 10 years (3654 days) = 25, up to 20 years (7306 days) = 40, up to 40 years (14611 days) = 70 credits. Plan limits: Explorer/PAYG 1 year, Pro 5 years, Startup 10 years, Scale and Enterprise 40 years. A span above your plan's limit is rejected with 400 `search_span_limit` naming the limit and the bracket that fits — nothing is charged. Any 4xx/5xx outcome is refunded, including a 429 compute_overload shed; rate-limit 429s are refused before anything is charged. Results are capped at 2500 stays per response (a gate stay counts 1, plus 1 per line stay inside it); past that every stay entered before `truncation.resume_from` is returned with `truncated: true`.
**Deadline:** 30 s of compute on every plan. A search that runs out of time returns the bodies it finished with `truncated: true` (reason `deadline`, the unsearched bodies in `truncation.remaining`); if none finished it returns 503 `compute_timeout`, and the credits are refunded.
Machine-generated report of what the historical-timezone correction overlay covers and what it does not. Regenerated from the same overlay.json used at request time, so it cannot drift from the live dataset.
`covered` lists every overlay row (region, local date range, zones, offsets, and its `precision` sourcing grade: 'statutory', 'documented', or 'inferred'). `gaps` lists, per region the overlay claims any coverage for, the uncovered date spans inside 1883-11-18 to 1970-01-01. Everything outside the polygons in `covered`, for every date, is uncovered by construction and is not separately enumerated.
Poll `overlay_version`/`overlay_hash` the same way as the `tz_overlay_version`/`tz_overlay_hash` fields on `/timezone/offset` — they move together.
Return the IANA timezone for the provided coordinates.
If no timezone can be confidently determined (e.g., mid-ocean or invalid
inputs), the endpoint falls back to UTC and marks `fallback=true`.
The underlying lookup is cached within the core tools.
Return the timezone and UTC offset for the provided coordinates and instant.
- Resolves an IANA timezone from the coordinates
- Applies the timezone's historical/DST rules at the given instant
- Returns offset in seconds/hours, a formatted string, and a DST flag
Calculate planetary positions in the sidereal zodiac with Jyotish overlays. Each planet receives its rashi (sign), nakshatra (lunar mansion) with pada and ruling planet, and navamsa (D-9 divisional chart) sign.
**Ayanamsa**: Defaults to Lahiri, the standard for North Indian Jyotish. Also supports Fagan-Bradley and Krishnamurti.
**Planets**: Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Rahu (North Node), and Ketu (South Node).
**Metering**: 1 unit per call.
**Dasha**: send `dasha` to add the Vimshottari (default), Yogini or Chara (Jaimini, K.N. Rao) periods of the birth Moon (mahadasha, antardasha, pratyantardasha) and, with `as_of_utc`, the periods running at that instant. The year length (`year_basis`) and the ayanamsa are choices the schools disagree on, so both are echoed; the dates are arithmetic from the Moon's sidereal longitude at birth (Chara: from the signs of the lagna and the grahas). Every period carries UTC and local times.
**Vargas**: send `vargas` (for example [9, 10]) to add divisional-chart placements for the lagna and every planet. Parashara reading only; the Navamsa (9) equals the `navamsa_sign` already returned.
**Strength**: send `include` with ashtakavarga, shadbala and/or bhava_bala for Ashtakavarga (Bhinna, Sarva, Lagna), Shadbala (all six balas and their parts) and Bhava Bala. No extra credit.
A Krishnamurti Paddhati (KP) chart. Sidereal Placidus cusps and the nine grahas, each with its sign lord, star (nakshatra) lord, sub lord and sub-sub lord and its KP number (1-249). The 249 sub-divisions are the Vimshottari proportions inside each nakshatra, checked boundary by boundary against a published KP table.
Also returns the significators both ways (house to planets at levels A-D: planets in the star of the occupants, the occupants, planets in the star of the owners, the owners; planet to houses at levels 1-4), Rahu and Ketu as agents of their sign lords, and the five ruling planets at the same moment (lagna star and sign lord, Moon star and sign lord, day lord with the day running sunrise to sunrise).
Ayanamsa defaults to krishnamurti (KP old); krishnamurti_vp291 is KP new. A place inside the polar circle, where Placidus is undefined, is a 422.
**Pricing:** 1 credit per call.
The 36-point Ashtakoota (Guna Milan) match of two charts, from the two Moons: Varna 1, Vashya 2, Tara 3, Yoni 4, Graha Maitri 5, Gana 6, Bhakoot 7, Nadi 8. Each koota returns its score, maximum, the class each partner fell in and a plain description; table cells that independent sources disagree on are flagged unverified.
Nadi, Bhakoot and Gana doshas and the Manglik (Mars) placement are returned as facts with the classical cancellation conditions listed. None is applied: the total is the raw 36-point score and this endpoint gives no verdict on a match.
**Pricing:** 2 credits per call.
The five limbs of the Vedic panchang for one local day (sunrise to the next sunrise) at one place: tithi with paksha, karana, yoga, the Moon's nakshatra and the vara (weekday of the sunrise date). Each limb lists every interval in force during the day with its exact start and end, found by root-finding the Sun and Moon on the DE440 ephemeris, so a tithi that ends at 14:35 and the one that follows are both returned.
Also returns sunrise, sunset and the next sunrise, the Sun's and Moon's sidereal signs at sunrise, and the daytime windows Rahu Kaal, Yamaganda, Gulika and Abhijit muhurta. All times are local with their UTC offset. Checked against Drik Panchang (New Delhi, New York in daylight saving time, Reykjavik in June, Tokyo).
A place where the Sun does not rise or set on that date (polar day or night) is a 422.
**Pricing:** 1 credit per call.
The Tajika annual chart for one year of life. Varsha Pravesh is the exact instant the Sun returns to its natal sidereal longitude, found on the DE440 ephemeris (checked against Swiss Ephemeris). The chart is cast there for the birthplace or for location.
Returns the varsha lagna and planets, the Muntha, the five office-bearers and the year lord (Varshesha) with every candidate's aspect on the lagna and Pancha-vargiya bala, Tajika aspects between the seven planets with Ithasala and Isharaf, and the fifty sahams. Rules follow Nilakantha's Samjnatantra as given in Balabhadra's Hayanaratna; where the classical authorities differ, a request field picks the variant and the response names it.
**Pricing:** 5 credits per call (one year).
Generate SVG/PNG chart wheel. Free on every tier, including Explorer.
Explorer
2
Auto-generated from the API's OpenAPI specification and tier gating middleware. Public endpoints (health checks, metadata, schemas) are omitted. All authenticated users access Explorer-tier endpoints. Higher-tier endpoints return a 403 Tier upgrade required response with upgrade instructions.
Read-Only Reference
Browse every endpoint without console noise.
This page stays read-only on purpose. Each endpoint includes the path, billing cost, required parameters, a working payload, and starter code for real integrations.
142 endpoints shown/142 total/17 metered groups/3 free groups
System health and readiness checks. Free — not metered.
System health checks. Verify that the API and its calculation engines are online and responding. Useful for monitoring dashboards and uptime checks.
GETFreeExplorer
Global Health Check
/health
Basic health check for the entire API service.
No auth requiredStatus: live
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/health"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200
Successful Response
503
Service Unavailable - readiness check failed
GETFreeExplorer
Detailed Health Check
/health/detailed
Health check that runs internal calculation self-tests (nakshatra, HD gates, Venus phase, aspects, harmonics, profections, firdaria, zodiacal releasing) plus one true external dependency check (the loaded ephemeris engine).
No auth requiredStatus: live
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/health/detailed"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200
Successful Response
503
Service Unavailable - readiness check failed
▶
api-metadata
Discover the API schema and current contract hash. Free — not metered.
Discovery and schema endpoints. Retrieve the OpenAPI specification, supported house systems, available celestial objects, and request/response schemas — useful for code generation and dynamic client configuration.
GETFreeExplorer
API Root
/
Welcome endpoint with API information and links to documentation.
No auth requiredStatus: live
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200Response Root Get
Successful Response
GETFreeExplorer
Get Supported House Systems
/ephemeris/house-systems
Get list of supported astrological house systems
API key or signed-in accountStatus: live
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/ephemeris/house-systems"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200
List of supported house systems
400
Bad Request - Input validation failed
404
Not found
422
Unprocessable Entity - Invalid input format
500
Internal Server Error - Calculation failed
GETFreeExplorer
Get Natal Chart Request Schema
/ephemeris/schemas/natal-request
Get JSON schema for natal chart request format
No auth requiredStatus: live
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/ephemeris/schemas/natal-request"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200
JSON schema for natal chart requests
400
Bad Request - Input validation failed
404
Not found
422
Unprocessable Entity - Invalid input format
500
Internal Server Error - Calculation failed
GETFreeExplorer
Get Natal Chart Response Schema
/ephemeris/schemas/natal-response
Get JSON schema for natal chart response format
API key or signed-in accountStatus: live
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/ephemeris/schemas/natal-response"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200
JSON schema for natal chart responses
400
Bad Request - Input validation failed
404
Not found
422
Unprocessable Entity - Invalid input format
500
Internal Server Error - Calculation failed
GETFreeExplorer
Get Supported Metadata
/ephemeris/supported-metadata
Get canonical metadata lookups used by calculations (sign elements/modalities, supported enums like dignity systems, house systems, node sources, etc.).
No auth requiredStatus: live
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/ephemeris/supported-metadata"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200
Supported metadata
400
Bad Request - Input validation failed
404
Not found
422
Unprocessable Entity - Invalid input format
500
Internal Server Error - Calculation failed
GETFreeExplorer
Get Supported Celestial Objects
/ephemeris/supported-objects
Get list of supported celestial objects in calculations
API key or signed-in accountStatus: live
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/ephemeris/supported-objects"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200
Supported celestial objects
400
Bad Request - Input validation failed
404
Not found
422
Unprocessable Entity - Invalid input format
500
Internal Server Error - Calculation failed
GETFreeExplorer
Get Openapi Schema
/meta/openapi.json
Return the OpenAPI schema for automated client generation.
Used by frontend build processes to generate type-safe API clients.
Authentication is NOT required for this discovery endpoint to facilitate
automated toolchain integration.
Returns:
OpenAPI 3.0 schema (JSON)
No auth requiredStatus: live
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/meta/openapi.json"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200
Successful Response
GETFreeExplorer
Get Api Version
/meta/version
Return current API version and contract hash for cache invalidation.
Frontend CI uses this to detect schema changes and trigger client regeneration.
Authentication is not required for this discovery endpoint.
No auth requiredStatus: live
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/meta/version"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200
Successful Response
▶
ephemeris
Discover the foundation of any chart. Get natal positions, houses, lots, core aspects, and fixed stars. Calculated with NASA-grade precision (JPL DE440, 1550–2650 CE). 1 unit per request (the prenatal-lunation search is 5 units).
The core of Open Ephemeris. Send a birth date, time, and place to receive a complete snapshot of where every planet was at that moment — positions, houses, angles, aspects, and more. This is the starting point for most integrations.
POST1 call / requestExplorer
Calculate angles + points (granular)
/ephemeris/angles-points
Mechanical endpoint returning Asc/MC/Desc/IC plus Vertex and the Equatorial Ascendant/Descendant (Ebertin EQA/EQD). The equatorial ascendant is also returned under the long-published key east_point, which is a synonym for the same point, not a separate one.
Calculate antiscia (mirror points across the Cancer/Capricorn solstice axis) and contra-antiscia for a set of planetary longitudes. Detects hidden conjunctions where one planet's antiscion falls on another planet's natal position. Central to Hellenistic and traditional Western astrology. 🤖 AI-optimized output available — add format=llm to reduce payload ~60%.
Analyse ecliptic coordinates to compute equatorial declinations, detect out-of-bounds (OOB) planets, and find declination aspects (parallels and contraparallels).
A planet is out of bounds when its declination exceeds the obliquity of the ecliptic (~23.44°). OOB planets operate outside the Sun's framework and are interpreted as wildcards in contemporary astrology. The Moon is the most frequently OOB body.
Parallels (same declination, same hemisphere) behave like conjunctions; contraparallels (equal but opposite declination) behave like oppositions.
🤖 Agent-first endpoint — pure deterministic math, no ephemeris kernel required.
Build a dispositor tree from a set of planetary sign placements. Each planet is "disposed" by the ruler of the sign it occupies. The algorithm walks these rulership chains to identify final dispositors (planets ruling their own sign) and mutual receptions (pairs disposing each other).
No ephemeris kernel required — pass in pre-computed sign placements. Signs are 0-based in the API (0=Aries … 11=Pisces) and converted internally.
🤖 Agent-first endpoint — pure deterministic math, no ephemeris required.
Calculate positions for fixed stars and galactic reference points at a specific moment. Supports individual names, predefined groups (royal_stars, behenian, ptolemaic, 15_fixed_stars, galactic), and magnitude filtering. Discover the current group list at GET /catalogs/fixed-stars/groups. Returns ecliptic coordinates, proper motion, and metadata for each entry. 🤖 AI-optimized output available — add format=llm to reduce payload ~60%.
The geodetic Midheaven, Ascendant, houses and sign zone of a place, and optionally the planets of a moment placed in those houses.
A place's east longitude from Greenwich is the zodiac longitude of its Midheaven (74 degrees W is 286 degrees, 16 Capricorn); the Ascendant and the 12 cusps follow from the latitude with the standard house engine, at a fixed mean obliquity (IAU 2006, J2000) so the same place always gives the same answer. Add date_time with include planets or contacts to read a moment against the place: planets in the geodetic houses and their conjunctions, squares and oppositions to the four angles.
Honest limits: the doctrine rests on secondary sources, the Greenwich anchor is a convention (anchor_offset_deg moves it), and the Midheaven is the ecliptic degree, not the right ascension. A quadrant house system inside the polar circle is replaced by Porphyry and the response says so. A sidereal chart is the tropical geodetic chart shown in the sidereal zodiac, like every other chart on this API.
Pricing: 1 credit per call.
Calculate harmonic chart positions by multiplying natal longitudes by a harmonic number N and reducing modulo 360°. Finds conjunctions in the harmonic space to reveal hidden aspect patterns.
Harmonic analysis is the mathematical backbone of aspect theory: the 5th harmonic unfolds quintiles, the 7th reveals septiles, the 9th produces the Vedic navamsa. Higher harmonics expose increasingly subtle geometric relationships invisible in a standard chart wheel.
🤖 Agent-first endpoint — pure deterministic math, no ephemeris required.
Calculate Hermetic lots (Fortune Suite + optional/legacy) for a given datetime and location. Returns normalized lot positions with traditional source references, formulas, and keywords. Includes sect determination (diurnal/nocturnal) and house placements. Follows standalone pattern: direct Julian Day calculation without chart context. Supports format=json|llm via query params.
Calculate the current lunar phase based on Sun-Moon elongation. Returns phase name/angle, illumination percentage, and lunation metadata (New Moon/Full Moon dates, day of lunation, void-of-course status). 🤖 AI-optimized output available — add format=llm to reduce payload ~50%.
Calculate zodiacal midpoints from planetary longitudes, detecting conjunctions and oppositions to sensitive points. Supports sort-by-type, tree grouping, and dial-degree formatting. 🤖 AI-optimized output available — add format=llm to reduce payload ~65%.
Uranian: send uranian for Hamburg-style output on a 360, 90, 45 or 22.5 degree dial: the dial sort, a focal midpoint tree and planetary pictures (A/B = C and A/B = C/D), optionally with the eight transneptunian points and the Aries Point. No extra credit. The orb is measured between the two midpoints; the equation residual is twice that, and both are returned.
When can the new crescent Moon be seen from here? For the New Moon (geocentric conjunction) on or after the requested date, and each of the three evenings that start with its local date: sunset, moonset, the lag, Yallop's best time (sunset + 4/9 lag), the Moon's age, ARCL, ARCV, DAZ and the crescent width, then Yallop's q-test (NAO Technical Note 69, zones A-F) and Odeh's V criterion (Experimental Astronomy 18, 2004, zones A-D). An evening on which the Moon sets before the Sun, or the topocentric conjunction is after sunset, is reported as not possible. No evening exists in polar day or night. IMPORTANT: this is an astronomical prediction of whether the crescent can be seen. It is not a religious ruling and does not decide the start of an Islamic month: communities and authorities follow their own rules (local or global sighting, calculation, or a published calendar).
API key or signed-in accountStatus: live
Parameters
datequeryRequired
Date (YYYY-MM-DD). The prediction is for the first New Moon (geocentric conjunction) on or after the start of the day two days before this date, so a date up to two days after a New Moon still returns that New Moon's evenings.
Example: 2026-02-17
latitudequeryRequired
Observer latitude
Example: -90
longitudequeryRequired
Observer longitude
Example: -180
timezonequery
IANA zone name, for example Asia/Riyadh. When given, each evening is that zone's civil date and every time is written with its offset; when omitted, the local mean solar day at the longitude and the zone at the coordinates. day_basis and timezone_source say which applied.
Example: Asia/Riyadh
elevquery
Observer elevation in metres above sea level. Lowers the visible horizon (dip ~ 1.76 arcmin * sqrt(metres)), which moves sunrise/sunset and moonrise/moonset earlier and later respectively - about 6 minutes per event at 1600 m. Default 0 reproduces the sea-level result exactly.
Example: 0
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/ephemeris/moon/crescent-visibility?date=2026-02-17&latitude=-90&longitude=-180"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200CrescentVisibilityResponse
Successful Response
422HTTPValidationError
Validation Error
POST1 call / requestExplorer
Enhanced Natal Chart Calculation
/ephemeris/natal-chart
Calculate a comprehensive natal chart with optional enhanced features.
Features
- Core: Planetary positions, houses, angles.
- Enhanced: Aspects, patterns, midpoints, harmonics, fixed stars, Arabic parts, dignities.
- Output modes: full (default), simple (core only), llm (AI-optimized).
Lunar nodes
- The default roster returns both North Nodes, each labelled: North Node (Mean) (mean-node polynomial) and North Node (True) (the Moon's osculating ascending node, from its DE440 state vector in the true ecliptic of date; the equivalent of Swiss Ephemeris SE_TRUE_NODE). The true_node body slug always selects the True (osculating) node, never the Mean node. South Nodes are the matching North Node + 180°.
- calculation_metadata.lunar_nodes states the method used for each node and apogee in the response, and calculation_metadata.node_source names the node mode in effect. Both are returned on every tier.
Input Flexibility
- Coordinates: decimal degrees, DMS strings, or component objects
- DateTime: ISO-8601 strings, Julian Day, or component objects
- Timezone: IANA names, UTC offsets, or auto-detection
Legacy request fields (e.g., custom orb tables) are safely ignored under the simplified contract but remain accepted for compatibility.
🤖 AI-optimized output available — add format=llm to reduce payload ~75%.
Lightweight endpoint for retrieving a single planet's position at a specific time. Supports both geocentric (default) and topocentric (with latitude/longitude) calculations.
Lightweight endpoint for determining whether a planet is retrograde at a specific time. Returns motion type (direct/retrograde/stationary) and speed data.
What is up tonight from one place: every body's rise, set and upper and lower culmination for the date (Sun, Moon, Mercury to Pluto, each with its own horizon: refraction, the Sun's and Moon's semi-diameter, the dip for elev), and for the night that follows (sunset to the next sunrise) which naked-eye planets can be seen and when, their magnitude and elongation, close approaches between the Moon and the planets, and the Moon hiding a planet or a bright star. Positions are topocentric throughout.
API key or signed-in accountStatus: live
Parameters
datequeryRequired
Date (YYYY-MM-DD)
Example: 2026-03-20
latitudequeryRequired
Observer latitude
Example: -90
longitudequeryRequired
Observer longitude
Example: -180
timezonequery
IANA zone name, for example Asia/Tokyo. When given, the day is that zone's civil day (midnight to midnight on its clock), so the times are the ones a local almanac lists for the date. When omitted, the day is the local mean solar day at the longitude: 24 hours starting at local mean midnight. The UTC day is never used; day_basis in the response says which applied. Without a zone, an event within about an hour of local midnight (mostly the Moon's) can fall on the neighbouring civil date; send timezone for the exact civil day. Zone rules come from current tzdata, so dates before 1970 may differ from the clocks of the time. Every time in the response is written with the offset of this zone, or, when omitted, of the zone at the coordinates (timezone and timezone_source in the response).
Example: Asia/Tokyo
elevquery
Observer elevation in metres above sea level. Lowers the visible horizon (dip ~ 1.76 arcmin * sqrt(metres)), which moves sunrise/sunset and moonrise/moonset earlier and later respectively - about 6 minutes per event at 1600 m. Default 0 reproduces the sea-level result exactly.
Example: 0
max_separation_degquery
Report close approaches up to this separation, degrees. Default 3, at most 10.
Example: 0
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/ephemeris/sky-tonight?date=2026-03-20&latitude=-90&longitude=-180"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200SkyTonightResponse
Successful Response
422HTTPValidationError
Validation Error
POST2 calls / requestExplorer
Birth-Time Sensitivity
/ephemeris/time-sensitivity
Which parts of a chart survive an uncertain birth time. For a stated birth moment, a place and a window, returns every boundary crossed inside the window (Ascendant and Midheaven sign changes, house cusp signs, each planet's sign and house), a per-fact verdict of stable, fragile or unstable, and the nearest boundary just outside the window.
Angles and cusps are solved in closed form and certified against the production house function a second either side; planets use the ephemeris at the window ends with a few real position calls per root, about 20 to 50 in all. Quadrant house systems inside the polar circle fall back to Porphyry and the response says so.
This answers "how much does this chart depend on the minute?" for an agent or a person. It does not estimate the true birth time.
Pricing: 2 credits per call.
Look ahead (or behind). Find exact times for transits, cast solar & lunar returns, calculate progressions, and run traditional time-lord techniques (primary directions, firdaria, annual profections, zodiacal releasing). 5 units per request (progressed-chart and transit-chart snapshot calls are 1 unit).
Answer the question "what happens next?" Find the exact dates when planets change signs, form alignments, or return to their birth position. Use these for transit alerts, horoscope engines, or timing features.
POST1 call / requestExplorer
Calculate progressed chart (Secondary, Tertiary, Solar Arc)
/ephemeris/progressed
Return progressed positions, aspects, and metadata for a subject. Supports Secondary (Naibod), Tertiary (I), Minor, and Solar Arc methods. 🤖 AI-optimized output available — add ormat=llm to reduce payload ~70%.
A chart cast for the exact instant of a Sun sign ingress (an equinox or solstice for the cardinal signs) or of the next New or Full Moon, at a place you choose.
The instant is solved from the Sun's apparent longitude (ingress) or the Sun-Moon elongation (lunation), and the response states how close the solved geometry is to the definition. The chart is geocentric and tropical: angles, 12 cusps, the Sun to Pluto and the Mean North Node with houses and retrograde flags, and sect. For an ingress it adds the traditional validity span (by the Ascendant's modality) and the lord-of-the-year candidates as separate labelled facts, plus house rulers; no candidate is called the lord of the year because the sources disagree.
Out of scope in this version: eclipse and great-conjunction events, overlay on a founding chart, and the Moon's applying aspects.
Pricing: 2 credits per call.
Every solar and lunar eclipse in a date range whose degree falls within orb of a natal point (planets, angles, nodes, lots), with the exact time and aspect, and, when location is given, whether and how it could be seen from there: contact times, magnitude, obscuration and the Sun's or Moon's altitude.
Pricing (by requested span, decided before any compute): the transit-search brackets — up to 1 year (367 days) = 5, up to 3 years = 10, up to 5 years = 15, up to 10 years = 25, up to 20 years = 40, up to 40 years = 70 credits; a span above your plan's limit is a 400 search_span_limit, nothing charged.
Placidus semi-arc primary directions. Promissors are the Sun through Saturn and their Ptolemaic aspects; significators default to the Ascendant, Midheaven, Sun, Moon and Part of Fortune. Two methods: placidus_mundane (the promissor's body, mundane aspects by semi-arc proportion) and placidus_zodiacal (the promissor's aspect degree on the ecliptic, without latitude). Every event names the method that produced it and gives the arc, the age under the Ptolemy and Naibod keys, and the date each key implies. Uses the true obliquity of the birth date. Placidus semi-arcs do not exist at or inside the polar circle; such births return 422.
Calculate the nearest return timing (body returns to its natal longitude) near a target datetime.
Supported bodies: Sun–Uranus, Mean Node, Mean/True Lilith.
🤖 AI-optimized output available — add format=llm to reduce payload ~65%.
Return not found within the specified search window (increase search_window_days)
422ErrorResponse
Unprocessable Entity - Invalid input
429ErrorResponse
Rate Limit Exceeded - Too many requests
500ErrorResponse
Internal Server Error
POST5 calls / requestExplorer
Sky Recurrence: When Does Your Sky Return?
/predictive/sky-recurrence
The previous and next times, within 1550-2650, that the slow planets (Jupiter to Pluto, or a subset) all stand again within orb_deg of their natal longitudes together, and the closest match on each side of birth whether or not it is within the orb. The search is exhaustive over the range (branch and bound on each body's maximum speed, so no window is skipped); window edges are to the second and the closest instant to 10 seconds. Checked against JPL Horizons. Positions are geocentric apparent longitudes; all times UTC.
Pricing (by requested span, decided before any compute): up to 100 years = 5, up to 300 years = 10, up to 1101 years (the whole DE440 range) = 15 credits. Omitting start_date and end_date searches the whole range (15).
Direct the Ascendant (or another releaser) through the Egyptian bounds: circumambulation, directing through the terms (Ptolemy, Tetrabiblos III; Valens, Anthology III). Returns a dated table of periods with the distributor (bound lord) and the partners (planets whose body or ray the directed point meets), and, with target_datetime, the period and partner in force. Arcs are checked against Swiss Ephemeris to 0.1′. All dates are ISO-8601 in the birthplace offset with the IANA timezone.
Calculate firdaria (فرادير) — the medieval Persian planetary period system that assigns each of the seven classical planets a fixed number of years as the dominant ruler of life. The 75-year master cycle differs for day births (diurnal) and night births (nocturnal). Each major period is subdivided into seven sub-periods in Chaldean order.
Firdaria operates independently of signs and houses — it is purely a time-based system making it complementary to profections and transits. Think of it as a 75-year program schedule: knowing your current major and sub-period ruler tells you which planetary archetype is most active in your life right now.
🤖 Agent-first endpoint — pure deterministic math, no ephemeris required.
Calculate annual profections — the foundational Hellenistic timing technique that advances one zodiac sign per birthday from the natal Ascendant. Returns the profected sign, activated house, time lord planet, element, modality, and a full multi-year timeline.
Profections are the simplest and most widely used timing technique in traditional astrology, experiencing a major revival in modern Hellenistic practice. Each year of life activates one whole-sign house from the Ascendant; the ruler of that sign becomes the "time lord" coloring the entire year. Angular years (1st, 4th, 7th, 10th) are typically the most eventful.
🤖 Agent-first endpoint — pure deterministic math, no ephemeris required.
Calculate zodiacal releasing — the Hellenistic timing technique of Vettius Valens (Anthology IV), which divides a life into a handful of chapters released from a sensitive Lot (Fortune for body and health, Spirit for career and action).
Each sign releases for its own minor years: Aries 15, Taurus 8, Gemini 20, Cancer 25, Leo 19, Virgo 20, Libra 8, Scorpio 15, Sagittarius 12, Capricorn 27, Aquarius 30, Pisces 12 — a full circuit of 211. Levels run on the traditional clock: a level-1 "year" is 360 days and a level-2 "month" is 30, each sub-level exactly one twelfth of the level above.
Angular periods (1st, 4th, 7th, 10th from the Lot) mark peak chapters. The loosing of the bond is an event in the sub-period sequence, not a property of a sign: when the level-2 walk would return to the sign its general period began on, it jumps to the sign opposite that period and carries on forward. Only general periods longer than one circuit (211 months ≈ 17.58 years) can contain one — Gemini, Cancer, Leo, Virgo, Capricorn and Aquarius.
When the Lots of Fortune and Spirit fall in the same sign, releasing from Spirit begins one sign forward (Valens IV, 4:7); spirit_advanced reports when that rule fired.
Returns L1 general periods with their L2 sub-periods as absolute dates, peak-period identification, angular/loosing flags, and the active period at the target datetime.
🤖 Agent-first endpoint — pure deterministic math, no ephemeris required.
Return a full chart payload for a given moment (transit chart). Includes all supported bodies: Sun–Pluto (core) plus Chiron, Mean/True North & South Nodes, Mean/True Lilith (Black Moon), and Ceres (extended bodies — gracefully omitted when ephemeris kernels are unavailable). Also returns houses/angles, aspects (major; minor opt-in), and a body_categories map for UI rendering. This is a chart snapshot endpoint (not a transit event search). 🤖 AI-optimized output: add format=llm to reduce payload ~70%.
Calculate when a planet transits to a specific longitude degree.
Features:
- Sub-minute precision for transit timing
- Retrograde motion handling with multiple crossings
- Duration calculations (approach and separation)
- All traditional and modern planets supported
Performance: <50ms for single transit calculations
Search for various types of transit events within a date range.
Features:
- Exact crossings of target degrees, several passes per target (results)
- Opt-in orb windows (orb_deg / aspect_orbs): enter, every exact hit including retrograde re-passes, and leave, per continuous in-orb episode (windows), with applying/separating at the range start
- Natal points × aspects as labelled targets (natal_points, aspects)
- Ranked by significance (sort=significance, limit, group=episodes): "my biggest transits this year", each hit with its score components (ranked)
- Configurable date ranges (plan limits: 1 year on Explorer/PAYG, 5 years on Pro, 10 years on Startup, 40 years on Scale and above)
Performance: one sampled track per planet shared by every target; the cost guard counts days × planets × targets.
Pricing (by requested span, decided before any compute): up to 1 year (367 days) = 5, up to 3 years (1097 days) = 10, up to 5 years (1828 days) = 15, up to 10 years (3654 days) = 25, up to 20 years (7306 days) = 40, up to 40 years (14611 days) = 70 credits. Plan limits: Explorer/PAYG 1 year, Pro 5 years, Startup 10 years, Scale and Enterprise 40 years. A span above your plan's limit is rejected with 400 search_span_limit naming the limit and the bracket that fits — nothing is charged. Any 4xx/5xx outcome is refunded, including a 429 compute_overload shed; rate-limit 429s are refused before anything is charged. Results are capped at 1000 transit events per response; past that the earliest 1000 are returned with truncated: true and truncation.resume_from to continue from.
Deadline: 30 s of compute on every plan. A search that runs out of time returns the bodies it finished with truncated: true (reason deadline, the unsearched bodies in truncation.remaining); if none finished it returns 503 compute_timeout, and the credits are refunded.
Calculate planetary sign ingresses (when planets change zodiac signs).
Features:
- Sub-minute precision for ingress timing
- Retrograde status detection
- All traditional and modern planets
- Batch processing for multiple planets
Performance: <200ms for batch ingress calculations
Explore relationships and overlays. Cast synastry, composite, and transit-to-natal charts effortlessly. 3 units per request (flat rate; does not scale by subject count).
Compare two people. Synastry measures how two birth charts interact, composite blends them into one relationship chart, and overlay shows one chart laid on top of another. Built for relationship and compatibility features.
POST3 calls / requestExplorer
Calculate Composite
/comparative/composite
Calculate a composite chart from 2–10 subjects. The default method, davison (also accepted as davidson, the spelling this API originally shipped), computes a true Davison relationship chart: a real chart cast at the mean of the subjects' birth instants and the great-circle midpoint of their birth places, with real planets, angles, and house cusps. method=midpoint instead averages each body's longitude across the subjects; a midpoint composite has no Ascendant or Midheaven, so its angles and house cusps are empty. The response's method field reports which was actually computed.
🤖 AI-optimized output available — add format=llm to reduce payload ~65%.
Calculate a 2-person Davison-style midpoint. Currently computes the Sun's midpoint longitude only — other planets are not averaged and houses/angles are not returned.
🤖 AI-optimized output available — add format=llm to reduce payload ~65%.
Calculate a synastry-style overlay between a natal chart and transits.
- Chart A: natal subject at birth
- Chart B: the same subject/location at transit_datetime (defaults to now UTC)
Map the cosmos to the earth. Astrocartography (ACG), cyclocartography (CCG), and Local Space endpoints. Returns GeoJSON feature collections—perfect for drawing maps in your app. 10 units per request (20 for relational-parans, 15 for heatmap endpoints; datasets/meta discovery is free).
Plot where planetary influence is strongest on a world map. Astrocartography lines show locations where specific planets were rising, setting, or at their peak when you were born. Returns GeoJSON for custom rendering — overlay planetary lines on an interactive map without computing geometry client-side.
POST10 calls / requestScale
Calculate Astrocartography Aspect Lines
/acg/aspects
Calculate strictly isolated ACG aspect lines. Options configurations to include power lines/midpoints will be explicitly stripped.
Find exact geographic points where two ACG lines intersect.
This is a novel feature — no other public ACG API provides crossing
points as structured data. Returns GeoJSON Point features.
Response packaging is stable: type=FeatureCollection, features is always an array (possibly empty), and crossing_count matches the feature count.
FeatureCollection response (features is always an array; may be empty).
422HTTPValidationError
Validation Error
GETFreeExplorer
Available ACG Datasets
/acg/datasets
List available celestial body catalogs and aspect angles.
API key or signed-in accountStatus: live
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/acg/datasets"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200
Successful Response
POST10 calls / requestScale
ACG Declination Parallel Lines
/acg/declination-lines
Compute declination parallel and contra-parallel latitude bands.
A NOVEL feature — no other ACG tool maps declination parallels
geographically. Returns horizontal GeoJSON lines where two bodies
share (parallel) or oppose (contra-parallel) declination.
Current endpoint contract uses a fixed 1.5° orb (DefaultDeclinationOrb). No max_orb query parameter is accepted on this route.
Calculates Astrocartography (ACG) geometry exclusively for the seven classical Hermetic Lots (Lot of Fortune, Spirit, Eros, Necessity, Courage, Victory, and Nemesis).
### Astrological & Mathematical Geometry
Hermetic Lots are sensitive mathematical points derived from the natal Ascendant and two planetary positions (e.g., Day Fortune = Ascendant + Moon − Sun). Unlike planets, their ecliptic longitude shifts with the observer's natal birthplace, so natal.birthplace_lat and natal.birthplace_lon are required fields for this endpoint.
The engine converts each lot's ecliptic longitude to equatorial coordinates (Right Ascension and Declination) using the standard ecliptic-to-equatorial transformation, then runs those coordinates through the same angular line generators used for all ACG bodies.
### Line Types Returned
All four standard angular line types are returned for each lot:
- MC — Meridian where the lot culminates (2-point vertical meridian)
- IC — Anti-culmination meridian, 180° opposite the MC (2-point vertical meridian)
- AC — Horizon curve where the lot's equivalent point rises (181-point sinusoidal arc)
- DC — Horizon curve where the lot's equivalent point sets (181-point sinusoidal arc)
Use the options.line_types field to restrict output to a subset (e.g., ["MC", "IC"]).
### Sect Awareness
Sect (day/night chart) is determined from the Sun's actual altitude at the natal birthplace and time. The day and night formulas are applied accordingly — e.g., Fortune uses ASC + Moon − Sun for day charts and ASC + Sun − Moon for night charts.
FeatureCollection response (features is always an array; may be empty).
422HTTPValidationError
Validation Error
POST10 calls / requestPro
ACG Line Proximity Hits
/acg/hits
Find ACG lines closest to a geographic location.
Supports two modes:
1. Proximity mode (recommended): Provide query_lat and query_lon in the request body to find lines near any arbitrary point. Optionally set radius_deg (default: 3.0, max: 90). Returns features sorted by distance (closest first) with min_distance_deg and min_distance_km in each feature's properties.
2. Birthplace fallback: If query_lat/query_lon are omitted but natal.birthplace_lat/natal.birthplace_lon are present, those coordinates are used as the query location.
3. Unfiltered mode (backward-compatible): If neither query location nor natal birthplace is provided, all computed features are returned unfiltered.
New request fields (all optional):
- query_lat (float): Latitude of the query point (-90 to 90)
- query_lon (float): Longitude of the query point (-180 to 180)
- radius_deg (float): Proximity radius in degrees (1° ≈ 111 km). Default: 3.0
curl -X GET "https://api.openephemeris.com/acg/meta"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200
Successful Response
POST10 calls / requestScale
ACG Midpoint Lines
/acg/midpoints
Compute astrocartography lines for all N(N-1)/2 body-pair midpoints.
Uses short-arc RA averaging in equatorial space, then runs each virtual
midpoint body through the standard MC/IC/AC/DC generators.
Returns MIDPOINT_MC, MIDPOINT_IC, MIDPOINT_AC, MIDPOINT_DC line types.
Render chart imagery. Generate natal chart wheels, comparative bi-wheels, and Human Design bodygraphs as SVG or PNG. Free on every tier, including Explorer. 2 units per request.
Get a finished chart image you can display directly. Returns SVG or PNG natal wheel diagrams and bi-wheel overlays — no drawing code needed on your side.
POST2 calls / requestExplorer
Generate Bi Wheel
/visualization/bi-wheel
Generate SVG/PNG bi-wheel chart. Free on every tier, including Explorer.
API key or signed-in accountStatus: live
Parameters
formatquery
No description provided.
Example: svg
sizequery
No description provided.
Example: 800
stylequery
No description provided.
Example: light
no_logoquery
When true, suppresses the Open Ephemeris watermark/logomark in the rendered SVG. Intended for white-label and embedded use cases where the chart is presented inside a host product's branded shell.
Example: false
aspect_gridquery
When true, renders an aspect-grid reference panel (the classic astro.com-style triangular/cross-ring matrix of aspect glyphs and orbs) as a band below the chart. Off by default; growing the canvas only when requested keeps existing callers' output unchanged. Note: when format=png, the resulting image is taller than it is wide (matches the SVG canvas) rather than square; if the server falls back to its legacy PNG rasterizer (native renderer unavailable), the panel is not rendered at all.
Example: false
aspect_grid_orbsquery
When aspect_grid is true, controls whether each populated cell also prints its orb in degrees. Defaults on; set false to show only the aspect glyph.
Example: true
include_angle_aspectsquery
When true, includes aspects to the four chart angles (Ascendant, Descendant, Midheaven, Imum Coeli) as lines on the wheel, in addition to planet-planet aspects. Angle-to-angle pairs are never drawn (Descendant and Imum Coeli are the 180° opposites of Ascendant and Midheaven, so those pairs carry no information beyond what Ascendant/Midheaven aspects already show). Uses the same tighter orbs as the /ephemeris/natal-chart/enhanced options.include_angle_aspects flag. Off by default: existing callers' wheel output is unchanged.
Example: false
elementsquery
When true, renders an element/modality summary table (Fire/Earth/Air/Water and Cardinal/Fixed/Mutable, with the actual body glyphs in each row) as a band below the chart. Off by default. Independent of aspect_grid — either or both may be requested. Same format=png caveats as aspect_grid apply.
Example: false
planet_colorsquery
When true, colors each planet/point glyph using Ela Map's canonical per-body palette instead of the default monochrome ink. Off by default; existing callers' output is unchanged. Bodies outside that palette (e.g. Earth, Lots, chart angles) keep the monochrome treatment.
Generates a visually premium Human Design bodygraph (SVG or PNG).
API key or signed-in accountStatus: live
Parameters
formatquery
No description provided.
Example: svg
sizequery
No description provided.
Example: 800
stylequery
No description provided.
Example: light
show_variablesquery
No description provided.
Example: false
show_planet_columnsquery
No description provided.
Example: false
layoutquery
Composition. 'graph' (default) is the classic bodygraph with flanking planet columns. 'mandala' nests that same diagram inside concentric I Ching, quarter and zodiac rings on a square canvas.
Example: graph
ringsquery
Comma-separated optional mandala bands. Ignored unless layout=mandala. Omit for the default set (quarter,hexagrams,zodiac,planets); pass an empty value for none. Accepted: godhead, quarter, hexagrams, zodiac, planets. Note: 'godhead' uses Jovian Archive Rave Cosmology nomenclature and is off by default.
Example: string
house_systemquery
House system for the mandala house ring. Only used when layout=mandala, rings includes 'houses', and latitude/longitude are supplied in the body. Accepts Placidus, Koch, Porphyry, Regiomontanus, Campanus, Equal, Whole Sign (codes or names). Quadrant systems substitute Porphyry at/within the polar circle (|lat| >= 90 - obliquity). Adds 1 credit when the house ring renders.
Generate SVG/PNG chart wheel. Free on every tier, including Explorer.
API key or signed-in accountStatus: live
Parameters
formatquery
No description provided.
Example: svg
sizequery
No description provided.
Example: 800
stylequery
No description provided.
Example: light
no_logoquery
When true, suppresses the Open Ephemeris watermark/logomark in the rendered SVG. Intended for white-label and embedded use cases where the chart is presented inside a host product's branded shell.
Example: false
aspect_gridquery
When true, renders an aspect-grid reference panel (the classic astro.com-style triangular matrix of aspect glyphs and orbs) as a band below the chart. Off by default; growing the canvas only when requested keeps existing callers' output unchanged. Note: when format=png, the resulting image is taller than it is wide (matches the SVG canvas) rather than square; if the server falls back to its legacy PNG rasterizer (native renderer unavailable), the panel is not rendered at all.
Example: false
aspect_grid_orbsquery
When aspect_grid is true, controls whether each populated cell also prints its orb in degrees. Defaults on; set false to show only the aspect glyph.
Example: true
include_angle_aspectsquery
When true, includes aspects to the four chart angles (Ascendant, Descendant, Midheaven, Imum Coeli) as lines on the wheel, in addition to planet-planet aspects. Angle-to-angle pairs are never drawn (Descendant and Imum Coeli are the 180° opposites of Ascendant and Midheaven, so those pairs carry no information beyond what Ascendant/Midheaven aspects already show). Uses the same tighter orbs as the /ephemeris/natal-chart/enhanced options.include_angle_aspects flag. Off by default: existing callers' wheel output is unchanged.
Example: false
elementsquery
When true, renders an element/modality summary table (Fire/Earth/Air/Water and Cardinal/Fixed/Mutable, with the actual body glyphs in each row) as a band below the chart. Off by default. Independent of aspect_grid — either or both may be requested. Same format=png caveats as aspect_grid apply.
Example: false
planet_colorsquery
When true, colors each planet/point glyph using Ela Map's canonical per-body palette instead of the default monochrome ink. Off by default; existing callers' output is unchanged. Bodies outside that palette (e.g. Earth, Lots, chart angles) keep the monochrome treatment.
Find the shadows. Calculate solar and lunar eclipses, global circumstances, next-visible searches, and Saros series data (solar eclipses only — lunar eclipse responses do not populate Saros fields). 1 unit per request.
Find when and where eclipses happen. Returns dates, types (total, partial, annular), visibility paths, and technical elements for both solar and lunar eclipses — past and future.
GET1 call / requestExplorer
Raw Besselian Elements
/eclipse/besselian-elements
Raw Besselian elements (X, Y, d, μ, l₁, l₂, f₁, f₂) and their time derivatives for any eclipse. For researchers and advanced users.
API key or signed-in accountStatus: live
Parameters
datequery
Eclipse date (ISO 8601)
Example: string
jdquery
Julian Day
Example: 1
delta_t_modelquery
No description provided.
Example: espenak_meeus
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/eclipse/besselian-elements"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200BesselianElementsResponse
Besselian elements for the eclipse
400ErrorResponse
Bad Request
422HTTPValidationError
Validation Error
500ErrorResponse
Internal Server Error
GET1 call / requestExplorer
Lunar Eclipse Global Circumstances
/eclipse/lunar/global
Lunar eclipse visibility with contact times (penumbral, partial, total). Safe to view without eye protection. 🤖 AI-optimized output available — add output_format=llm to reduce payload ~55%.
API key or signed-in accountStatus: live
Parameters
datequery
Eclipse date (ISO 8601)
Example: string
jdquery
Julian Day
Example: 1
delta_t_modelquery
No description provided.
Example: espenak_meeus
output_formatquery
No description provided.
Example: raw
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/eclipse/lunar/global"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200LunarEclipseGlobalResponse
Lunar eclipse global circumstances
400ErrorResponse
Bad Request
422HTTPValidationError
Validation Error
500ErrorResponse
Internal Server Error
GET1 call / requestExplorer
Next Eclipse
/eclipse/next
Find the next solar or lunar eclipse anywhere on Earth after a given date — a forward search, not a point-in-time lookup. No location required; for local visibility and contact times at a specific place, use /eclipse/next-visible instead.
API key or signed-in accountStatus: live
Parameters
eclipse_typequery
'solar', 'lunar', or 'any'
Example: any
datequery
ISO 8601 date to search after (e.g. 2026-01-01). Defaults to now if omitted.
Example: string
jdquery
Julian Day to search after (alternative to date). Defaults to now if omitted.
Example: 1
after_datequery
Alias for 'date' — ISO 8601 date to search after (e.g. 2026-01-01). Defaults to now if omitted. If both 'date' and 'after_date' are given, 'date' wins.
Example: string
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/eclipse/next"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200NextVisibleResponse
Next eclipse of the requested type after the given date
400ErrorResponse
Bad Request
422HTTPValidationError
Validation Error
500ErrorResponse
Internal Server Error
GET1 call / requestExplorer
Next Visible Eclipse
/eclipse/next-visible
Find the next solar or lunar eclipse visible from specific coordinates. Planning tool for eclipse chasers.
API key or signed-in accountStatus: live
Parameters
latqueryRequired
Observer latitude
Example: -90
lonqueryRequired
Observer longitude
Example: -180
typequery
'solar', 'lunar', or 'any'
Example: any
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/eclipse/next-visible?lat=-90&lon=-180"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200NextVisibleResponse
Next visible eclipse with local circumstances
400ErrorResponse
Bad Request
422HTTPValidationError
Validation Error
500ErrorResponse
Internal Server Error
GET1 call / requestExplorer
Solar Eclipse Global Circumstances
/eclipse/solar/global
Calculate complete solar eclipse circumstances with Besselian elements and global path for a given date. Returns eclipse classification, Saros series, safety warnings, and uncertainty analysis. 🤖 AI-optimized output available — add output_format=llm to reduce payload ~55%.
API key or signed-in accountStatus: live
Parameters
datequery
Eclipse date (ISO 8601, e.g. 2026-08-12)
Example: string
jdquery
Julian Day (alternative to date)
Example: 1
delta_t_modelquery
'espenak_meeus' or 'stephenson_2021'
Example: espenak_meeus
output_formatquery
'raw' or 'llm'
Example: raw
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/eclipse/solar/global"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200SolarEclipseGlobalResponse
Solar eclipse global circumstances with Besselian elements
400ErrorResponse
Bad Request
422HTTPValidationError
Validation Error
500ErrorResponse
Internal Server Error
GET1 call / requestExplorer
Solar Eclipse Local Circumstances
/eclipse/solar/local
Local circumstances for a specific observer: magnitude, obscuration, contact times (C1-C4), duration, and sun position. 🤖 AI-optimized output available — add output_format=llm to reduce payload ~55%.
API key or signed-in accountStatus: live
Parameters
datequery
Eclipse date (ISO 8601)
Example: string
jdquery
Julian Day
Example: 1
latqueryRequired
Observer latitude
Example: -90
lonqueryRequired
Observer longitude
Example: -180
elevquery
Observer elevation in meters
Example: 0
delta_t_modelquery
No description provided.
Example: espenak_meeus
output_formatquery
No description provided.
Example: raw
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/eclipse/solar/local?lat=-90&lon=-180"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200SolarEclipseLocalResponse
Solar eclipse local circumstances for observer
400ErrorResponse
Bad Request
422HTTPValidationError
Validation Error
500ErrorResponse
Internal Server Error
▶
Human Design
Map the energetic blueprint. Bodygraphs, composite charts, transit fields, and pentas. 2 units per request (transit-chart and composite are 3).
Human Design combines astrology, the I Ching, Kabbalah, and the chakra system into a personality framework. These endpoints calculate a full chart including type, authority, profile, gates, channels, and defined centers from birth data.
POST2 calls / requestExplorer
Create Human Design Chart
/human-design/chart
Generate a full Human Design bodygraph.
Free on every tier, including Explorer.
Generate a Composite / Relationship Chart.
Analyzes Electromagnetic connection scoring between two charts.
Pricing: 3 credits (+2 with include_visual). Available on every plan.
Pairwise Human Design connections for 3 to 12 people, with group aggregates.
Every pair is classified exactly as POST /human-design/composite classifies a pair (electromagnetic, companionship, dominance, compromise), returned as N x N matrices (symmetric, plus directional dominance_from and compromise_from) and, with detail=channels, per-pair channel rows. The group block lists the channels and centers the whole group defines together, the channels formed only by combination and the channels several people define. A person holds a gate when it is active in their Personality or their Design.
This is mechanics, not doctrine: it does not name a Penta, a Wa or a group type and ranks nothing; for more than five people no such rule is published in a citable form. For exactly two people use POST /human-design/composite; for a Penta analysis of 3-5 people use POST /human-design/penta.
Pricing: 2 credits per subject — 6 for 3 people, 24 for 12 — read from the request before any compute and refunded on failure. A subject whose birth data cannot be resolved fails the whole call with a 422 that names it; nothing is charged.
Calculate the Human Design chart at the moment a planet opposes its natal position (180°).
Most commonly used for Uranus Opposition (~age 42), Saturn Opposition (~age 14-15, ~44), and Jupiter Opposition (~age 6, ~18, ~30).
Calculate a Human Design chart at the moment any planet returns to its natal longitude.
Supports sun, moon, mercury, venus, mars, jupiter, saturn, uranus, neptune, pluto, chiron, and pholus.
Human Design address for points beyond the 13 bodygraph bodies, at the Personality instant and at the Design instant (88° of solar arc earlier), both at the birth location.
Choose what to compute with include: bodies (asteroids, Chiron, Lilith, Vertex, the mean node and the Uranian set), angles (ASC, DSC, MC, IC), lots (the seven Hermetic Lots, cast in the sect of each instant's own chart — Sun above the horizon is a day chart), stars (fixed stars, evaluated at each epoch) and kernel_bodies (opt-in: the kernel-backed catalog of asteroids, centaurs and trans-Neptunian objects, named as on the /acg endpoints; a requested body whose kernel does not cover the Personality or Design instant refuses the whole request with a 422). bodies alone is the default. Stars need star_groups (see GET /catalogs/fixed-stars/groups), star_names (catalog slugs, see GET /catalogs/fixed-stars), or both; the result is their union, de-duplicated and in catalog order.
These points never enter the bodygraph: no definition, channels, centers, type, authority or cross. Use /human-design/chart for those.
Access: any API key can call this route. Every key receives gate and line for each point. longitude, color, tone and base (and a star's ecliptic latitude) are returned only on Pro plans and above; on other keys they are omitted and metadata.deep_fields is false.
Pricing: priced by what you ask for, once per request (Personality and Design together): extended bodies 3 credits, angles 1, Hermetic Lots 2, fixed stars 3 per star group plus 1 per named star (capped at 20), kernel bodies 1 per named body capped at 20 (naming none costs 20). The smallest request (angles only) is 1 credit. The price is read from the request before any compute, and a rejected request is refunded.
Generate a Penta (Group Dynamics) Analysis.
Valid for groups of 3 to 5 people.
Focuses on trans-auric forms (BG5).
Pricing: 2 credits per member chart — 6 for 3 members, 8 for 4, 10 for 5 — read from the request before any compute.
200Response Human Design Transit Human Design Transit Post
Successful Response
422HTTPValidationError
Validation Error
POST3 calls / requestExplorer
Human Design Transit Chart
/human-design/transit-chart
Personalized Human Design transit overlay.
Overlays the transiting field on a person's natal bodygraph and reports the channels a transit temporarily completes plus any newly-defined centers.
Pricing: 3 credits, available on every plan. Set include_visual=true for an overlay bodygraph SVG/PNG (+2 credits).
200Response Human Design Transit Chart Human Design Transit Chart Post
Successful Response
422HTTPValidationError
Validation Error
POST5 calls / requestExplorer
Human Design Transit Timeline
/human-design/transit-timeline
Human Design transits over a date range.
For each transiting body: every gate it enters and leaves (and optionally every line), with retrograde re-entries marked. With natal gates (a subject or a gate list): every window in which a transiting gate completes one of the person's channels.
Gates are fixed arcs of the 302° wheel, so each entry and exit is an exact degree crossing, found to about a second. Range cap, span brackets and cost guard as /predictive/transits/search.
Pricing (by requested span, decided before any compute): up to 1 year (367 days) = 5, up to 3 years (1097 days) = 10, up to 5 years (1828 days) = 15, up to 10 years (3654 days) = 25, up to 20 years (7306 days) = 40, up to 40 years (14611 days) = 70 credits. Plan limits: Explorer/PAYG 1 year, Pro 5 years, Startup 10 years, Scale and Enterprise 40 years. A span above your plan's limit is rejected with 400 search_span_limit naming the limit and the bracket that fits — nothing is charged. Any 4xx/5xx outcome is refunded, including a 429 compute_overload shed; rate-limit 429s are refused before anything is charged. Results are capped at 2500 stays per response (a gate stay counts 1, plus 1 per line stay inside it); past that every stay entered before truncation.resume_from is returned with truncated: true.
Deadline: 30 s of compute on every plan. A search that runs out of time returns the bodies it finished with truncated: true (reason deadline, the unsearched bodies in truncation.remaining); if none finished it returns 503 compute_timeout, and the credits are refunded.
Eastern insights. BaZi (Four Pillars) charts, element balance, luck pillars, ten gods analysis, compatibility, solar terms, and the Chinese zodiac. 1 unit per request (element-balance, luck-pillars, ten-gods, annual-pillar, compatibility, and solar-terms are 3).
Chinese astrology, also called the Four Pillars of Destiny (BaZi). Returns the year, month, day, and hour pillars with their heavenly stems, earthly branches, and elemental balance for any birth date.
POST1 call / requestExplorer
Calculate Four Pillars of Destiny (BaZi)
/chinese/bazi
Compute the Four Pillars (八字 BaZi) for a birth date and time. Returns the Heavenly Stem and Earthly Branch for each pillar (year, month, day, hour), along with the Day Master — the core element of BaZi self-analysis.
Heavenly Stems: 10 stems cycling through 5 elements × 2 polarities.
Earthly Branches: 12 branches, each associated with a zodiac animal.
Day Master (日主): The Day Stem's element represents the self.
Note: The Year and Month Pillars both roll over at Lì Chūn (立春, ~Feb 4), the traditional solar-term boundary — not at 1 January. A birth before Lì Chūn belongs to the previous sexagenary year. See metadata for the exact solar term used.
Metering: 1 unit per call.
API key or signed-in accountStatus: live
Parameters
formatquery
Response format: json (full) or llm (compact columnar).
Full Four Pillars with stems, branches, and Day Master.
422
Validation error (bad date, out-of-range values).
POST3 calls / requestExplorer
BaZi Annual Pillar (Liu Nian)
/chinese/bazi/annual-pillar
Calculate the Heavenly Stem and Earthly Branch for any given Gregorian year (Liu Nian 流年 annual pillar). Optionally returns the NaYin resonance element.
Metering: 3 units per call.
Render the Four Pillars (八字 BaZi) as a finished chart image — the same computation as POST /chinese/bazi, drawn.
Returns the four pillars, the Day Master, the Five-Element (五行 Wu Xing) balance and the Yong Shen (用神, favourable element) as a single self-contained SVG, a base64 PNG, or a bare SVG blob — no client-side charting required.
Output — select with visual_config.format:
- svg (default): JSON envelope with the SVG string in visual.data.
- png: JSON envelope with base64 PNG in visual.data.
- svg-raw: a bare image/svg+xml body, no JSON envelope. Convenient for <img src>, but it carries no calculation_metadata, so the convention echo is unavailable in this mode.
Conventions: accepts the same five convention fields as POST /chinese/bazi (solar-term boundary, hour-pillar rule, zone handling), and echoes what was used in calculation_metadata.
Metering: 3 units per call — 1 for the pillar computation plus 2 for the visual render. credits_used reports the total actually charged.
Rendered BaZi chart. svg and png return the JSON envelope; svg-raw returns a bare SVG document.
422HTTPValidationError
Validation Error
POST3 calls / requestExplorer
BaZi Compatibility (八字合婚)
/chinese/bazi/compatibility
Assess the compatibility between two BaZi charts using Six Harmonies (六合), Three Harmonies (三合), Six Clashes (六冲), Six Harms (六害), and Day Master element interactions.
Returns a 0–100 composite score, an assessment label (excellent / good / moderate / challenging), and a list of specific factors found.
Note: The 0–100 scoring is an Open Ephemeris algorithmic interpretation. BaZi compatibility analysis is nuanced and multi-layered; this endpoint provides a structured starting point.
Metering: 3 units per call.
Compatibility score, assessment, and contributing factors.
422
Validation error.
POST3 calls / requestExplorer
BaZi Element Balance (Wu Xing)
/chinese/bazi/element-balance
Calculate the weighted Wu Xing (五行) element balance across all four pillars of a BaZi chart, including hidden stems within the earthly branches.
Returns percentage scores for each of the five elements, Day Master strength (strong/weak/neutral), and the recommended Yong Shen (用神) favourable element.
Metering: 3 units per call.
Five-element scores, Day Master strength, and Yong Shen.
422
Validation error.
POST3 calls / requestExplorer
BaZi Luck Pillars (Da Yun)
/chinese/bazi/luck-pillars
Calculate the eight 10-year Da Yun (大运) luck pillars for a BaZi chart. Starting age is computed from the nearest solar term (Jié) boundary — 3 days from birth = 1 year of starting age (classical Zi Ping rule).
Requires gender to determine whether pillars progress forward or backward through the sexagenary cycle.
Metering: 3 units per call.
Eight Da Yun luck pillars with starting age and direction.
422
Validation error.
POST3 calls / requestExplorer
24 Solar Terms for a Year
/chinese/bazi/solar-terms
Return all 24 Jiéqì (节气) solar terms for a given Gregorian year, with exact datetime (UTC) computed from true apparent solar longitude.
Includes both the 12 Jié (节, month-starting terms used in BaZi) and the 12 Qì (气, mid-month terms). Dates are computed via the same ephemeris bridge used by /chinese/bazi.
Metering: 3 units per call.
Calculate the Ten Gods (十神 Shí Shén) for a BaZi chart relative to the Day Master. Returns the Ten God label, Chinese name, category, and hidden stem Ten Gods for all four pillars.
The Ten Gods describe the nature of each element in the chart relative to the self (Day Master): Friend, Rob Wealth, Eating God, Hurting Officer, Indirect Wealth, Direct Wealth, Seven Killings, Direct Officer, Indirect Resource, Direct Resource.
Metering: 3 units per call.
One Gregorian month of the Chinese calendar: every day (lunar date, pillars, solar terms, Tong Shu basics), the solar terms in the month at their exact instants and the lunar months that overlap it with their new moons.
The calendar is computed from the DE440 new moons and solar terms under the modern rules (dingqi, from the Shixian reform of 1645): a month starts on the Beijing date of its new moon, month 11 holds the winter solstice, and in a 13-month year the first month with no zhongqi is the leap month (2033 gets 闰十一月, as the Hong Kong Observatory lists). Checked against all 2,473 months and 4,800 solar-term dates of the Hong Kong Observatory tables 1901-2100 and 4,129 days of lunar-javascript 1645-2648.
Tong Shu basics per day: the day officer (建除十二神), the 28-lodge day cycle (宿直), the clash and the sha direction. Pillars: the year by Lichun, the month by jie, the day by the sexagenary count; the lunar year's own name (by New Year) is returned separately. Every name has an id, simplified and traditional Chinese and pinyin.
Pricing: 3 credits per call (one month).
Converts a Gregorian date to the Chinese lunisolar date, or a lunar date (with leap flag) back to Gregorian, and returns the whole day: lunar year, month and day, the four pillars' year, month and day pairs plus the 12 hour pillars, the solar terms on that date at their exact instants, the jie in force and the next term, and the Tong Shu basics.
The calendar is computed from the DE440 new moons and solar terms under the modern rules (dingqi, from the Shixian reform of 1645): a month starts on the Beijing date of its new moon, month 11 holds the winter solstice, and in a 13-month year the first month with no zhongqi is the leap month (2033 gets 闰十一月, as the Hong Kong Observatory lists). Checked against all 2,473 months and 4,800 solar-term dates of the Hong Kong Observatory tables 1901-2100 and 4,129 days of lunar-javascript 1645-2648.
Tong Shu basics per day: the day officer (建除十二神), the 28-lodge day cycle (宿直), the clash and the sha direction. Pillars: the year by Lichun, the month by jie, the day by the sexagenary count; the lunar year's own name (by New Year) is returned separately. Every name has an id, simplified and traditional Chinese and pinyin.
Range: Chinese New Year 1645 to 2648-12-31. Earlier dates used the mean-term Datong calendar and are a 422.
Pricing: 1 credit per call.
The natal Zi Wei Dou Shu (Purple Star Astrology) chart of a birth: the twelve palaces with their stems and roles, the Life and Body palaces, the five-element bureau, the 14 major stars and 14 minor stars with brightness, the four transformations of the year stem and the ten-year cycles.
The lunisolar date is computed from the engine's own new moons and solar terms (birth years 1551 to 2648), not from a table. The schools disagree on the leap-month rule, the day boundary at 23:00, the year boundary and a few transformation stems, so each is an option and every choice is echoed in conventions. Where a birth is within minutes of a lunar month boundary, or the late-Zi roll crosses one, a warning says the day numbering may differ from a published table by one day.
Not included in this version: the Zhong Zhou school rules, adjective stars and yearly or monthly overlays.
Pricing: 2 credits per call.
Quick lookup of the Chinese zodiac animal, element, and Yin/Yang polarity for any Gregorian year. Also returns the year's Heavenly Stem and Earthly Branch.
The 12-animal cycle: Rat, Ox, Tiger, Rabbit, Dragon, Snake, Horse, Goat, Monkey, Rooster, Dog, Pig.
The 5-element cycle: Wood, Fire, Earth, Metal, Water (each element governs two consecutive years).
Metering: 1 unit per call.
API key or signed-in accountStatus: live
Parameters
yearqueryRequired
Gregorian year to look up.
Example: 2024
formatquery
Response format: json (full) or llm (compact).
Example: json
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/chinese/zodiac?year=2024"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200ZodiacResponse
Zodiac animal, element, polarity, and stem/branch.
422
Validation error (missing or out-of-range year).
▶
vedic
Vedic (Jyotish) calculations including Ayanamsha and the Navamsa (D-9) divisional chart. 1 unit per request.
Vedic astrology (Jyotish) uses a sidereal zodiac that accounts for the precession of the equinoxes. Returns a sidereal birth chart with nakshatras (lunar mansions), dashas (planetary periods), and yogas (special combinations).
POST1 call / requestExplorer
Generate a Vedic (sidereal) natal chart
/vedic/chart
Calculate planetary positions in the sidereal zodiac with Jyotish overlays. Each planet receives its rashi (sign), nakshatra (lunar mansion) with pada and ruling planet, and navamsa (D-9 divisional chart) sign.
Ayanamsa: Defaults to Lahiri, the standard for North Indian Jyotish. Also supports Fagan-Bradley and Krishnamurti.
Planets: Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Rahu (North Node), and Ketu (South Node).
Metering: 1 unit per call.
Dasha: send dasha to add the Vimshottari (default), Yogini or Chara (Jaimini, K.N. Rao) periods of the birth Moon (mahadasha, antardasha, pratyantardasha) and, with as_of_utc, the periods running at that instant. The year length (year_basis) and the ayanamsa are choices the schools disagree on, so both are echoed; the dates are arithmetic from the Moon's sidereal longitude at birth (Chara: from the signs of the lagna and the grahas). Every period carries UTC and local times.
Vargas: send vargas (for example [9, 10]) to add divisional-chart placements for the lagna and every planet. Parashara reading only; the Navamsa (9) equals the navamsa_sign already returned.
Strength: send include with ashtakavarga, shadbala and/or bhava_bala for Ashtakavarga (Bhinna, Sarva, Lagna), Shadbala (all six balas and their parts) and Bhava Bala. No extra credit.
API key or signed-in accountStatus: live
Parameters
formatquery
Response format: json (full) or llm (compact columnar).
A Krishnamurti Paddhati (KP) chart. Sidereal Placidus cusps and the nine grahas, each with its sign lord, star (nakshatra) lord, sub lord and sub-sub lord and its KP number (1-249). The 249 sub-divisions are the Vimshottari proportions inside each nakshatra, checked boundary by boundary against a published KP table.
Also returns the significators both ways (house to planets at levels A-D: planets in the star of the occupants, the occupants, planets in the star of the owners, the owners; planet to houses at levels 1-4), Rahu and Ketu as agents of their sign lords, and the five ruling planets at the same moment (lagna star and sign lord, Moon star and sign lord, day lord with the day running sunrise to sunrise).
Ayanamsa defaults to krishnamurti (KP old); krishnamurti_vp291 is KP new. A place inside the polar circle, where Placidus is undefined, is a 422.
Pricing: 1 credit per call.
The 36-point Ashtakoota (Guna Milan) match of two charts, from the two Moons: Varna 1, Vashya 2, Tara 3, Yoni 4, Graha Maitri 5, Gana 6, Bhakoot 7, Nadi 8. Each koota returns its score, maximum, the class each partner fell in and a plain description; table cells that independent sources disagree on are flagged unverified.
Nadi, Bhakoot and Gana doshas and the Manglik (Mars) placement are returned as facts with the classical cancellation conditions listed. None is applied: the total is the raw 36-point score and this endpoint gives no verdict on a match.
Pricing: 2 credits per call.
The five limbs of the Vedic panchang for one local day (sunrise to the next sunrise) at one place: tithi with paksha, karana, yoga, the Moon's nakshatra and the vara (weekday of the sunrise date). Each limb lists every interval in force during the day with its exact start and end, found by root-finding the Sun and Moon on the DE440 ephemeris, so a tithi that ends at 14:35 and the one that follows are both returned.
Also returns sunrise, sunset and the next sunrise, the Sun's and Moon's sidereal signs at sunrise, and the daytime windows Rahu Kaal, Yamaganda, Gulika and Abhijit muhurta. All times are local with their UTC offset. Checked against Drik Panchang (New Delhi, New York in daylight saving time, Reykjavik in June, Tokyo).
A place where the Sun does not rise or set on that date (polar day or night) is a 422.
Pricing: 1 credit per call.
The Tajika annual chart for one year of life. Varsha Pravesh is the exact instant the Sun returns to its natal sidereal longitude, found on the DE440 ephemeris (checked against Swiss Ephemeris). The chart is cast there for the birthplace or for location.
Returns the varsha lagna and planets, the Muntha, the five office-bearers and the year lord (Varshesha) with every candidate's aspect on the lagna and Pancha-vargiya bala, Tajika aspects between the seven planets with Ithasala and Isharaf, and the fifty sahams. Rules follow Nilakantha's Samjnatantra as given in Balabhadra's Hayanaratna; where the classical authorities differ, a request field picks the variant and the response names it.
Pricing: 5 credits per call (one year).
Work with the earth's rhythms. Biodynamic planting profiles and multi-day agricultural calendars. 1 unit per request.
Moon-based timing for farming and gardening. Biodynamic agriculture tracks the Moon's sign, phase, and aspects to suggest optimal days for planting, pruning, harvesting, or resting. Returns daily profiles and monthly calendars.
GET1 call / requestExplorer
Biodynamic monthly calendar
/ephemeris/agro/calendar
Returns compact biodynamic summaries for a date range (max 31 days).
Each day includes: day type, quality score, ascending status, void-of-course
active flag, phase name, and illumination percentage. Designed for building
monthly planning calendars.
🤖 AI-optimized output available — add format=llm to reduce payload ~80%.
API key or signed-in accountStatus: live
Parameters
latqueryRequired
Observer latitude (WGS84, degrees)
Example: -90
lonqueryRequired
Observer longitude (WGS84, degrees)
Example: -180
startqueryRequired
Start date as YYYY-MM-DD
Example: 2026-03-01
endqueryRequired
End date as YYYY-MM-DD (inclusive, max 31 days from start)
Example: 2026-03-31
elevquery
Observer elevation in metres above sea level. Lowers the visible horizon (dip ~ 1.76 arcmin * sqrt(metres)), which moves sunrise/sunset and moonrise/moonset earlier and later respectively - about 6 minutes per event at 1600 m. Default 0 reproduces the sea-level result exactly.
Example: 0
formatquery
Output format
Example: json
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/ephemeris/agro/calendar?lat=-90&lon=-180&start=2026-03-01&end=2026-03-31"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200AgroCalendarResponse
Successful Response
400ErrorResponse
Bad Request
422HTTPValidationError
Validation Error
500ErrorResponse
Internal Server Error
GET1 call / requestExplorer
Biodynamic daily profile
/ephemeris/agro/daily
Returns a complete Maria Thun biodynamic day profile for a given date and location.
Includes:
- Moon sign, element, latitude velocity (ascending/descending)
- Thun day type (root / leaf / flower / fruit) with quality score (0–100)
- Aspect modifiers with explained score impacts (Saturn, Jupiter, Mars, Node)
- Activity recommendations (favorable / unfavorable / optimal tasks)
- Void-of-course window (active status + next window)
- Lunar phase + illumination
- Sunrise, sunset, moonrise, moonset (topocentric; agree with JPL Horizons to within about a minute)
Zodiac: Always tropical for Thun classification (per Thun methodology).
Ephemeris: DE440.
🤖 AI-optimized output available — add format=llm to reduce payload ~70%.
API key or signed-in accountStatus: live
Parameters
latqueryRequired
Observer latitude (WGS84, degrees)
Example: -90
lonqueryRequired
Observer longitude (WGS84, degrees)
Example: -180
datequeryRequired
Date as YYYY-MM-DD
Example: 2026-03-15
timezonequery
IANA zone name, for example Asia/Tokyo. When given, the day is that zone's civil day (midnight to midnight on its clock), so the times are the ones a local almanac lists for the date. When omitted, the day is the local mean solar day at the longitude: 24 hours starting at local mean midnight. The UTC day is never used; day_basis in the response says which applied. Without a zone, an event within about an hour of local midnight (mostly the Moon's) can fall on the neighbouring civil date; send timezone for the exact civil day. It applies to the sunrise, sunset, moonrise and moonset in horizon only. Zone rules come from current tzdata, so dates before 1970 may differ from the clocks of the time.
Example: Asia/Tokyo
elevquery
Observer elevation in metres above sea level. Lowers the visible horizon (dip ~ 1.76 arcmin * sqrt(metres)), which moves sunrise/sunset and moonrise/moonset earlier and later respectively - about 6 minutes per event at 1600 m. Default 0 reproduces the sea-level result exactly.
Example: 0
formatquery
Output format
Example: json
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/ephemeris/agro/daily?lat=-90&lon=-180&date=2026-03-15"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200AgroDailyResponse
Successful Response
400ErrorResponse
Bad Request
422HTTPValidationError
Validation Error
500ErrorResponse
Internal Server Error
GET1 call / requestExplorer
Void of Course Moon
/ephemeris/agro/void-of-course
Returns the current Void of Course (VoC) Moon window for a given Julian Day.
Method 3: scans backward from the Moon's next sign ingress to find the last
major Ptolemaic aspect (conjunction, sextile, square, trine, opposition) to
a traditional planet. The VoC period runs from that aspect until the ingress.
API key or signed-in accountStatus: live
Parameters
jdqueryRequired
Julian Day (UT1)
Example: 2451545
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/ephemeris/agro/void-of-course?jd=2451545"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200VoCData
Successful Response
400ErrorResponse
Bad Request
422HTTPValidationError
Validation Error
500ErrorResponse
Internal Server Error
▶
tidal
Calculate tidal forces and lunar coastal influences. 1 unit per request.
Astronomical tidal forcing — the gravitational pull of the Moon and Sun on Earth's oceans. Returns tidal potential values for any date and location, useful for maritime planning, coastal research, or deep-time paleoclimate studies.
GET1 call / requestExplorer
Astronomical Tidal Forcing
/tidal/forcing
Calculate astronomical gravitational forcing potential (spring/neap, perigee, etc) for a specific location.
API key or signed-in accountStatus: live
Parameters
latqueryRequired
Observer latitude
Example: -90
lonqueryRequired
Observer longitude
Example: -180
datequery
Date in YYYY-MM-DD format
Example: string
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/tidal/forcing?lat=-90&lon=-180"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200TidalForcingResponse
Tidal forcing metrics and indices
400ErrorResponse
Bad Request
422HTTPValidationError
Validation Error
500ErrorResponse
Internal Server Error
▶
venus-cycles
Explore the elegant dance of Venus. Synodic cycle analysis and Star Points. 1 unit per request.
Track the Venus cycle — the planet's 8-year pattern of conjunctions with the Sun that traces a five-pointed star in the sky. Returns station dates, elongation points, synodic phases, and the complete star-point pattern.
POST1 call / requestExplorer
Compute Venus Star Points
/ephemeris/venus-star-points
Compute Sun-Venus conjunction events for a birth. natal_conjunction is the last conjunction before birth (the natal rule of Arielle Guttman's technique), with its type (inferior/superior) and Morning/Evening Star phase. star_points lists the five conjunctions nearest in time to birth, whichever side they fall on. Each event carries zodiac dignity, the phase Venus enters afterwards, and combustion status. Times are exact to about one second. 🤖 AI-optimized output available — add format=llm to reduce payload ~60%.
Find every Sun-Venus conjunction (inferior and superior) in a date range, each computed from the ephemeris to about one second. The range may span up to 36525 days (100 years); a longer range is rejected with 422 rather than silently cut short. Inferior conjunctions are followed by a Morning Star phase, superior by an Evening Star phase (visibility). 🤖 AI-optimized output available — add format=llm to reduce payload ~60%.
Compute Venus's 8-year star: the 5 Sun-Venus conjunctions of one type (inferior or superior), about 584 days apart, starting with the first conjunction on or after date, which sets the type. 🤖 AI-optimized output available — add format=llm to reduce payload ~60%.
Mark the turning of the wheel. Cross-quarter days, exact moon phases, and lunar standstills. 10 units per request.
Astronomical calendar events. Get exact dates for solstices, equinoxes, cross-quarter days (midpoints between solstices and equinoxes), Moon phase dates, and lunar standstill status — useful for event apps and seasonal features.
GET5 calls / requestExplorer
Wheel of the Year — True Astronomical Dates
/calendar/astrology/cross-quarter
Returns the 8 Wheel of the Year events (4 cross-quarters + 4 cardinal points) calculated using true apparent solar longitude from JPL DE440. Cross-quarter dates are the true midpoints between solstices and equinoxes, NOT the traditional Gregorian approximations. 🤖 AI-optimized output available — add format=llm to reduce payload ~45%. Pricing: 5 credits — one year, 8 events (the transit-search 1-year bracket).
API key or signed-in accountStatus: live
Parameters
yearqueryRequired
Calendar year (Gregorian). Supported range: 1550–2649 (JPL DE440).
Example: 2025
formatquery
Response format: json | llm.
Example: string
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/calendar/astrology/cross-quarter?year=2025"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200CrossQuarterResponse
8 Wheel of the Year events in chronological order
400ErrorResponse
Bad Request
422HTTPValidationError
Validation Error
500ErrorResponse
Internal Server Error
GET2 calls / requestExplorer
Lunar Standstill — 18.6-Year Nodal Cycle Status
/calendar/astrology/lunar-standstill
Returns the current state of the 18.6-year lunar nodal cycle. Identifies Major Standstill (Moon reaches ±28.6° declination) and Minor Standstill (Moon limited to ±18.3°) epochs. The most recent Major Standstill is circa 2025.4. Pricing: 2 credits — a single point-in-time lookup.
API key or signed-in accountStatus: live
Parameters
datequery
Date in YYYY-MM-DD format.
Example: string
jdquery
Julian Day.
Example: 1
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/calendar/astrology/lunar-standstill"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200LunarStandstillResponse
Nodal cycle status and next standstill dates
400ErrorResponse
Bad Request
422HTTPValidationError
Validation Error
500ErrorResponse
Internal Server Error
GET2 calls / requestExplorer
8-Phase Lunar Classification + Next Principal Phases
/calendar/astrology/moon-phases
Returns the current 8-phase lunar phase classification (not just 4), illumination fraction, Moon age in hours, and the next 4 principal phase moments (New, First Quarter, Full, Third Quarter). 🤖 AI-optimized output available — add format=llm to reduce payload ~45%. Pricing: 2 credits — one 30-day lunar cycle (at most 4 exact phase events): the cheapest way to get the exact time of the next New, First Quarter, Full or Third Quarter Moon. New and Full Moon events carry the Moon's distance and supermoon / micromoon class (supermoon_definition), and apsides lists the perigees and apogees in the same 30 days.
API key or signed-in accountStatus: live
Parameters
datequery
Date in YYYY-MM-DD format. Mutually exclusive with jd.
Example: string
jdquery
Julian Day. Mutually exclusive with date.
Example: 1
formatquery
Response format: json | llm.
Example: string
supermoon_definitionquery
Which reading of the supermoon rule to apply. Both use the 90% rule of Richard Nolle, who coined the word in 1979 ("a new or full moon which occurs with the Moon at or near (within 90% of) its closest approach to Earth in a given orbit"). orbit_90 (default; Fred Espenak's tables and NASA): relative distance = (Da - D) / (Da - Dp) with Da and Dp the apogee and perigee nearest in time to the New or Full Moon. year_90 (Nolle's own worked method): Da and Dp are the farthest apogee and closest perigee of that UTC calendar year. Supermoon when the relative distance is 0.9 or more, micromoon when it is 0.1 or less (Espenak). "Supermoon" is not an IAU term.
Example: orbit_90
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/calendar/astrology/moon-phases"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200MoonPhasesResponse
Current phase and upcoming principal phases
400ErrorResponse
Bad Request
422HTTPValidationError
Validation Error
500ErrorResponse
Internal Server Error
▶
lunar
Track the Moon's journey. Phases, aspects, void-of-course windows, and exact lunar ingresses. 1 unit per request.
Everything about the Moon right now. Get the current Moon sign, illumination percentage, phase name, void-of-course status (when the Moon makes no more major aspects before changing signs), and upcoming sign changes.
GET1 call / requestExplorer
Get current Moon aspects
/ephemeris/moon/aspects
Returns all current Moon aspects to traditional planets with applying/separating classification.
Performance: 15-30ms
Aspect Classification:
- Applying: Moon approaching exact aspect (energies building)
- Separating: Moon departing from exact aspect (energies waning)
- Classification based on Moon vs planet speeds (Moon moves ~13°/day, faster than any planet)
Orb System: Fixed traditional orbs (no custom orbs in v1)
- Major aspects: Conjunction, Opposition, Square, Trine, Sextile
- Minor aspects: Semi-sextile, Quincunx (optional via include_minor parameter)
Planets Checked: Sun, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto
Use Cases:
- "What aspects is the Moon making right now?"
- Moon aspect tracking for timing decisions
- Lunar aspect calendars
- Real-time lunar energy awareness
Example:
API key or signed-in accountStatus: live
Parameters
datetimequeryRequired
ISO-8601 datetime, e.g. '2025-12-11T12:00:00Z'. A clock time must carry its own zone ('Z' or ±HH:MM); a zone-less clock time is rejected with 400 ambiguous_datetime. A date-only value resolves to 12:00 UTC.
Example: 2025-12-11T12:00:00Z
zodiac_modequery
Zodiac mode: 'tropical' or 'sidereal'
Example: tropical
include_minorquery
Include minor aspects (semi-sextile, quincunx)
Example: false
formatquery
Response format: json | llm.
Example: json
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/ephemeris/moon/aspects?datetime=2025-12-11T12%3A00%3A00Z"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Returns all Moon sign ingress events within a date range.
Moon Ingress Frequency: ~13 ingresses per month (Moon changes signs every ~2.5 days)
Performance: <5ms (cached), 50-100ms (cache miss)
Cache is pre-warmed for ±3 months on startup and refreshed daily at 00:01 UTC.
Cache Strategy:
- Tropical and sidereal ingresses cached separately (different times due to ~24° ayanamsa offset)
- Redis backend with 30-day TTL
- Rolling 3-month window maintained automatically
- Graceful fallback to live calculation if cache miss
- Startup health check reports cache status
Use Cases:
- Monthly lunar calendars
- "Best days for haircuts" timing apps
- Moon sign tracking applications
- Gardening/manifestation by Moon sign
- Electional astrology lookups
Rate Limiting: Max 90-day range per query to prevent abuse.
Example:
API key or signed-in accountStatus: live
Parameters
start_datequeryRequired
Range start date (ISO 8601 format)
Example: 2025-12-01T00:00:00Z
end_datequeryRequired
Range end date (ISO 8601 format, max 90 days from start)
Example: 2025-12-31T23:59:59Z
zodiac_modequery
Zodiac mode: 'tropical' or 'sidereal'
Example: tropical
formatquery
Response format: json | llm.
Example: json
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/ephemeris/moon/ingresses?start_date=2025-12-01T00%3A00%3A00Z&end_date=2025-12-31T23%3A59%3A59Z"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Returns lunar phase information for a specific datetime.
Performance: tens of milliseconds: the perigee/apogee root-finds and the search for the next supermoon and micromoon (up to 16 lunations) dominate
Phase Names:
- New Moon
- Waxing Crescent
- First Quarter
- Waxing Gibbous
- Full Moon
- Waning Gibbous
- Last Quarter
- Waning Crescent
Data Returned:
- Phase name and illumination percentage (0-100%)
- Sun-Moon elongation angle (0-360°)
- Waxing/waning classification
- Moon age in days (~0-29.53 day cycle)
- Moon distance from Earth (km)
- Moon angular diameter (degrees)
- Previous and next perigee and apogee, exact to about a second, with distances (apsides)
- Next New Moon and Full Moon with their distance and supermoon / micromoon class, and the next supermoon and micromoon Full Moons (supermoon_definition picks the rule; default orbit_90, Espenak's)
Use Cases:
- Daily lunar calendars
- Gardening by Moon phase (Full Moon planting, etc.)
- Manifestation/ritual timing (New Moon intentions, Full Moon releases)
- General lunar awareness apps
- Fishing/hunting activity timing
Example:
API key or signed-in accountStatus: live
Parameters
datetimequeryRequired
ISO-8601 datetime, e.g. '2025-12-11T12:00:00Z'. A clock time must carry its own zone ('Z' or ±HH:MM); a zone-less clock time is rejected with 400 ambiguous_datetime. A date-only value resolves to 12:00 UTC.
Example: 2025-12-11T12:00:00Z
formatquery
Response format: json | llm.
Example: json
timezonequery
IANA zone name, for example Asia/Jakarta. The perigee, apogee and New/Full Moon times are written with this zone's UTC offset. Default: UTC.
Example: Asia/Jakarta
supermoon_definitionquery
Which reading of the supermoon rule to apply. Both use the 90% rule of Richard Nolle, who coined the word in 1979 ("a new or full moon which occurs with the Moon at or near (within 90% of) its closest approach to Earth in a given orbit"). orbit_90 (default; Fred Espenak's tables and NASA): relative distance = (Da - D) / (Da - Dp) with Da and Dp the apogee and perigee nearest in time to the New or Full Moon. year_90 (Nolle's own worked method): Da and Dp are the farthest apogee and closest perigee of that UTC calendar year. Supermoon when the relative distance is 0.9 or more, micromoon when it is 0.1 or less (Espenak). "Supermoon" is not an IAU term.
Example: orbit_90
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/ephemeris/moon/phase?datetime=2025-12-11T12%3A00%3A00Z"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Returns Void of Course Moon status for a specific datetime using Method 3 definition.
Void of Course (VoC) Definition:
Moon is VoC when it makes no major aspects (conjunction, opposition, square, trine, sextile)
to traditional planets (Sun through Pluto) before changing zodiac signs.
Method 3 Logic:
- VoC period cannot start before Moon's last sign ingress
- Searches backwards from next ingress for last major aspect (COQTS)
- If no aspects found, VoC starts at previous ingress (calendar-accurate)
- Uses fixed traditional orbs (no custom orbs in v1)
Performance: 20-50ms (aspect search + ingress calculation)
Use Cases:
- Electional astrology: "Is now a good time to sign contracts?"
- Daily VoC calendars for timing decisions
- Timing-sensitive decision support tools
Example:
API key or signed-in accountStatus: live
Parameters
datetimequeryRequired
ISO-8601 datetime, e.g. '2025-12-11T12:00:00Z'. A clock time must carry its own zone ('Z' or ±HH:MM); a zone-less clock time is rejected with 400 ambiguous_datetime. A date-only value resolves to 12:00 UTC.
Example: 2025-12-11T12:00:00Z
zodiac_modequery
Zodiac mode: 'tropical' or 'sidereal'
Example: tropical
formatquery
Response format: json | llm.
Example: json
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/ephemeris/moon/void-of-course?datetime=2025-12-11T12%3A00%3A00Z"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Geocoding and timezone resolution to help you locate your charts accurately. 1 unit per request.
Turn a place name into coordinates, or coordinates into a place name, and resolve the correct timezone. These utility endpoints handle the geography side of chart calculations so you don't have to.
GET1 call / requestExplorer
Search for locations by name
/location/autocomplete
Returns location suggestions with coordinates and timezone for typeahead search. Results are cached according to backend cache configuration.
API key or signed-in accountStatus: live
Parameters
queryqueryRequired
Search query (city name, address, etc.)
Example: San Francisco
limitquery
Maximum number of suggestions to return
Example: 5
countryquery
Optional ISO 3166-1 alpha-2 country code (e.g., US, GB) used to bias ranking toward that country. Boost, not filter: results in other countries remain reachable.
Example: string
regionquery
Optional admin1 (state/province/region) qualifier used to bias ranking. Accepts a full name ("Michigan", "Quebec"), an ASCII name, or a GeoNames admin1 code ("MI"). Boost, not filter.
Example: string
admin1query
Alias for region: admin1 (state/province) qualifier used to bias ranking. region takes precedence if both are supplied.
Example: string
nearquery
Optional "lat,lon" proximity hint (e.g., "37.77,-122.42") used to bias ranking toward nearby places. Boost, not filter.
Example: string
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/location/autocomplete?query=San+Francisco"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Convert latitude/longitude to a human-readable location with timezone.
API key or signed-in accountStatus: live
Parameters
latqueryRequired
Latitude in decimal degrees
Example: 40.7128
lngqueryRequired
Longitude in decimal degrees
Example: -74.006
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/location/reverse?lat=40.7128&lng=-74.006"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200ReverseGeocodeResponse
Successful Response
400
Bad Request - Invalid parameters
422HTTPValidationError
Validation Error
503
Service Unavailable - Geocoding provider down
Example Success Response
{
"city": "New York",
"country": "United States",
"country_code": "US",
"display_name": "New York, New York, United States",
"latitude": 40.7128,
"longitude": -74.006,
"region": "New York",
"timezone": "America/New_York"
}
GET1 call / requestExplorer
Historical timezone overlay coverage report
/timezone/coverage
Machine-generated report of what the historical-timezone correction overlay covers and what it does not. Regenerated from the same overlay.json used at request time, so it cannot drift from the live dataset.
covered lists every overlay row (region, local date range, zones, offsets, and its precision sourcing grade: 'statutory', 'documented', or 'inferred'). gaps lists, per region the overlay claims any coverage for, the uncovered date spans inside 1883-11-18 to 1970-01-01. Everything outside the polygons in covered, for every date, is uncovered by construction and is not separately enumerated.
Poll overlay_version/overlay_hash the same way as the tz_overlay_version/tz_overlay_hash fields on /timezone/offset — they move together.
API key or signed-in accountStatus: live
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/timezone/coverage"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200
Successful Response
500
Internal Server Error
POST1 call / requestExplorer
Resolve IANA timezone from coordinates
/timezone/lookup
Return the IANA timezone for the provided coordinates.
If no timezone can be confidently determined (e.g., mid-ocean or invalid
inputs), the endpoint falls back to UTC and marks fallback=true.
The underlying lookup is cached within the core tools.
Return the timezone and UTC offset for the provided coordinates and instant.
- Resolves an IANA timezone from the coordinates
- Applies the timezone's historical/DST rules at the given instant
- Returns offset in seconds/hours, a formatted string, and a DST flag
Explore our extensive reference catalogs. See all supported planets, asteroids, fixed stars, and star groups available for calculation. Free — not metered.
Browse the lists of celestial bodies, fixed stars, house systems, and other options that Open Ephemeris supports. Useful for building dropdown menus, validating inputs, or discovering what the API can calculate.
GETFreeExplorer
Catalog of supported natal bodies
/catalogs/bodies
Catalog-driven identifiers for selectable natal bodies (planets, nodes, Lilith points, major asteroids). This surface is intended for commercial clients and UIs.
API key or signed-in accountStatus: live
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/catalogs/bodies"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200CatalogBodiesResponse
Successful Response
GETFreeExplorer
Catalog of fixed stars (paginated)
/catalogs/fixed-stars
Returns fixed stars discoverable via the built-in star catalog when available, falling back to the built-in registry for core stars.
API key or signed-in accountStatus: live
Parameters
limitquery
Page size
Example: 100
offsetquery
Offset into the full list
Example: 0
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/catalogs/fixed-stars"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200CatalogFixedStarsResponse
Successful Response
422HTTPValidationError
Validation Error
GETFreeExplorer
Catalog of fixed star group identifiers
/catalogs/fixed-stars/groups
Named fixed-star groups (royal stars, Behenian, Ptolemaic, galactic) for filtering /catalogs/fixed-stars queries.
API key or signed-in accountStatus: live
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/catalogs/fixed-stars/groups"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200CatalogFixedStarGroupsResponse
Successful Response
▶
Time Conversion
Convert between time formats. Julian Day numbers, sidereal time, sunrise/sunset. 1 unit per request.
Convert between time formats. Translate everyday dates into Julian Day numbers (used internally for astronomical calculations), get the current sidereal time for a location, compute sunrise and sunset, and more.
GET1 call / requestExplorer
Delta T (TT-UT1) calculation
/time/delta-t
Provide Delta T (TT - UT1) for any historical/future epoch.
API key or signed-in accountStatus: live
Parameters
datequeryRequired
Date (YYYY-MM-DD)
Example: 2026-03-15
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/time/delta-t?date=2026-03-15"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200DeltaTResponse
Successful Response
400ErrorResponse
Bad Request
422HTTPValidationError
Validation Error
500ErrorResponse
Internal Server Error
GET1 call / requestExplorer
Equation of Time
/time/equation-of-time
Compute the Equation of Time (sundial correction) in minutes for a given JD.
API key or signed-in accountStatus: live
Parameters
jdqueryRequired
Julian Day (Terrestrial Time)
Example: 1
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/time/equation-of-time?jd=1"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200EquationOfTimeResponse
Successful Response
400ErrorResponse
Bad Request
422HTTPValidationError
Validation Error
500ErrorResponse
Internal Server Error
POST1 call / requestExplorer
Calendar conversion to Julian Day Number
/time/julian-day
Bridge between civil calendars and astronomical time. Handles BCE dates.
Compute Local Apparent Sidereal Time (LAST) and Greenwich Mean Sidereal Time (GMST).
API key or signed-in accountStatus: live
Parameters
datequeryRequired
Date (YYYY-MM-DD) or Julian Day (jd:2451545.0)
Example: 2026-03-15
longitudequery
Observer longitude (positive East)
Example: 0
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/time/sidereal?date=2026-03-15"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200SiderealTimeResponse
Successful Response
400ErrorResponse
Bad Request
422HTTPValidationError
Validation Error
500ErrorResponse
Internal Server Error
GET1 call / requestExplorer
Solar Events (Sunrise/Sunset/Transit)
/time/solar-event
Compute exact times for sunrise, sunset, and solar transit for a given day and location.
API key or signed-in accountStatus: live
Parameters
datequeryRequired
Date (YYYY-MM-DD)
Example: 2026-03-20
latitudequeryRequired
Observer latitude
Example: -90
longitudequeryRequired
Observer longitude
Example: -180
timezonequery
IANA zone name, for example Asia/Tokyo. When given, the day is that zone's civil day (midnight to midnight on its clock), so the times are the ones a local almanac lists for the date. When omitted, the day is the local mean solar day at the longitude: 24 hours starting at local mean midnight. The UTC day is never used; day_basis in the response says which applied. Without a zone, an event within about an hour of local midnight (mostly the Moon's) can fall on the neighbouring civil date; send timezone for the exact civil day. Zone rules come from current tzdata, so dates before 1970 may differ from the clocks of the time.
Example: Asia/Tokyo
elevquery
Observer elevation in metres above sea level. Lowers the visible horizon (dip ~ 1.76 arcmin * sqrt(metres)), which moves sunrise/sunset and moonrise/moonset earlier and later respectively - about 6 minutes per event at 1600 m. Default 0 reproduces the sea-level result exactly.
Example: 0
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/time/solar-event?date=2026-03-20&latitude=-90&longitude=-180"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200SolarEventResponse
Successful Response
400ErrorResponse
Bad Request
422HTTPValidationError
Validation Error
500ErrorResponse
Internal Server Error
▶
electional
Find the best moment for a specific activity. Score a moment's viability, search a date range for top-ranked windows, track planetary stations, and search active aspects. 5 units per request.
Find the best moment for a specific activity. Electional astrology analyzes upcoming planetary conditions to suggest favorable windows for launching, signing, traveling, or other time-sensitive decisions. Returns moment quality scores and recommended time ranges.
GET5 calls / requestPro
Angle Crossing Search
/electional/angle-crossings
Find the moments at which bodies cross the Ascendant, Descendant, Midheaven, or Imum Coeli at a geographic point — the time-inverse of astrocartography. Where /acg/power-lines answers "what is angular here at time T", this answers "at what T is this body angular here".
Crossing times are solved on the same in-mundo (equatorial RA/Dec) geometry the ACG line engine draws, so casting the map at a returned moment places the corresponding line through the query point. Circumpolar cases — where a body never rises or never sets at that latitude — return no event rather than an error. Ranges are capped at 366 days and are rejected rather than silently truncated.
Cost budget: each body × angle × day is one closed-form root solve (~2 ms of compute). A single request may spend at most 15,000 units (bodies × angles × days); requests over budget are rejected with a 422 naming the arithmetic — reduce bodies, angles, or the date range and issue additional requests. The default body set (7) across all four angles supports a full 366-day range (7 × 4 × 366 = 10,248); 10 bodies × 4 angles × 366 days (14,640) is the widest full-year sweep. For long broad sweeps, slice the range into consecutive start/end windows — results are deterministic, so slices compose exactly.
Concurrency & backpressure: heavy endpoints (this one, /acg/*, heatmaps, /electional/find-window and station-tracker) share a per-machine pool of 4 compute slots. When all slots are busy a request waits up to 5 s for admission and is then shed with 429 + Retry-After: 5 (problem type problems/compute_overload) — honor Retry-After with bounded backoff. Admitted work is bounded by a 25 s compute deadline.
Pricing (by requested span, decided before any compute): up to 1 month (31 days) = 5, up to 3 months (92 days) = 8, up to 6 months (183 days) = 10, up to 1 year (366 days) = 12 credits. The 366-day range limit applies on every plan. A span above your plan's limit is rejected with 400 search_span_limit naming the limit and the bracket that fits — nothing is charged. Any 4xx/5xx outcome is refunded, including a 429 compute_overload shed; rate-limit 429s are refused before anything is charged. Results are capped by max_results (reported as truncated in the summary).
API key or signed-in accountStatus: live
Parameters
latitudequeryRequired
Query point latitude in decimal degrees (positive north).
Example: -90
longitudequeryRequired
Query point longitude in decimal degrees (positive east).
Example: -180
startquery
Start of the search range. ISO 8601 date or zoned datetime; a naive clock time is rejected rather than guessed at, and a bare date resolves to 12:00 UTC. Defaults to the start of the current UTC day.
Example: string
endquery
End of the search range, same datetime rules as start. Defaults to 24 hours after start. A range over 366 days is rejected (400 search_span_limit for metered callers, 422 otherwise) rather than silently clamped.
Example: string
bodiesquery
Comma-separated body names. Defaults to the classical seven (Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn). Accepts any standard ACG body plus the usual aliases (Rahu, Ketu, NorthNode). Vertex is not searchable here — it is derived from a natal birthplace.
Example: string
anglesquery
Comma-separated angles: AC, DC, MC, IC. ASC/DSC are accepted as aliases. Defaults to all four.
Example: string
refraction_correctionquery
Apply atmospheric refraction to the AC/DC horizon, matching the option of the same name on the ACG endpoints. Defaults to false (geometric horizon), so results align with default ACG lines.
Example: false
natal_datetimequery
Optional natal instant. When given, the bodies that /acg/ccg mode=ccg_hybrid secondary-progresses — Sun, Moon, Mercury, Venus, Mars and the lunar nodes — are progressed from it (day-for-a-year, the same formula and body set that endpoint draws with) while every other body stays a transit, so a returned moment sits on the PROGRESSED line the hybrid transit map paints rather than the transit line. Same datetime rules as start: a naive clock time is rejected, a bare date resolves to 12:00 UTC. Crossings of progressed bodies carry progressed: true, and search_summary.progression names the mode, the natal instant and the bodies progressed. Omit for the pure transit search.
Example: string
max_resultsquery
Maximum number of crossing events to return. Defaults to 500 (a lean first page); may be raised to the 5000 ceiling. When the cap truncates the sweep, the response says so via truncated / truncated_at_body / truncated_at_angle / omitted_bodies rather than returning a list that looks complete.
Example: 5000
formatquery
Output format: json (default) or llm.
Example: string
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/electional/angle-crossings?latitude=-90&longitude=-180"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200ElectionalAngleCrossingsResponse
Chronological angle-crossing events
422HTTPValidationError
Validation Error
GET5 calls / requestPro
Active Aspect Search
/electional/aspect-search
List all applying and separating aspects active at a given moment, enriched with quality scores. Useful for identifying the astrological texture of a chosen time.
API key or signed-in accountStatus: live
Parameters
datequery
Date/datetime to check (ISO 8601 or YYYY-MM-DD). Defaults to now.
Example: string
jdquery
Julian Day alternative to date.
Example: 1
max_orbquery
Maximum orb in degrees (default 8.0).
Example: 8
aspectsquery
Comma-sep aspect filter: conjunction,sextile,square,trine,opposition. Defaults to all.
Example: string
formatquery
Output format: json (default) or llm.
Example: string
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/electional/aspect-search"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200ElectionalAspectSearchResponse
Active aspects
422HTTPValidationError
Validation Error
GET5 calls / requestPro
Find Electional Window
/electional/find-window
Search a date range for the highest-scoring astrological timing windows. Evaluates moments in 1-hour steps, applies optional constraints (VOC avoidance, retrograde avoidance, lunar phase filter), and returns the top N ranked windows.
Pricing (by requested span, decided before any compute): up to 30 days (30 days) = 5, up to 60 days (60 days) = 8, up to 120 days (120 days) = 12 credits. Plan limits: Pro 30 days, Startup 60 days, Scale and above 120 days. An omitted end_date defaults to 30 days out and is clamped to your limit rather than rejected. A span above your plan's limit is rejected with 400 search_span_limit naming the limit and the bracket that fits — nothing is charged. Any 4xx/5xx outcome is refunded, including a 429 compute_overload shed; rate-limit 429s are refused before anything is charged. At most 20 windows are returned (max_results).
API key or signed-in accountStatus: live
Parameters
start_datequery
Start of search range (ISO 8601 or YYYY-MM-DD). Defaults to today.
Example: string
end_datequery
End of search range. Defaults to 30 days after start.
Example: string
latitudequery
Observer latitude (decimal degrees). With longitude, this determines chart sect at each step of the scan, so windows that straddle sunrise or sunset are scored under the sect actually in force. Omit either coordinate, or send an out-of-range pair, and every step falls back to diurnal — search_summary.sect_basis reports which branch ran.
Example: 1
longitudequery
Observer longitude (decimal degrees). Required alongside latitude for sect: whether the Sun is above the horizon is a local fact and neither coordinate settles it alone.
Example: 1
max_resultsquery
Maximum number of windows to return (1-20).
Example: 5
avoid_vocquery
Exclude void-of-course Moon periods.
Example: true
lunar_phasequery
Preferred lunar phase: waxing, waning, new, full, or any.
Example: any
avoid_retrogradequery
Comma-separated planet names to exclude when retrograde, e.g. Mercury,Mars.
Example: string
formatquery
Output format: json (default) or llm.
Example: string
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/electional/find-window"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200ElectionalWindowResponse
Window search results
422HTTPValidationError
Validation Error
GET5 calls / requestExplorer
Electional Moment Analysis
/electional/moment-analysis
Score and analyse the astrological quality of a specific moment. Returns a 0-100 composite viability score derived from essential dignities, aspect quality, sect alignment, and void-of-course status.
API key or signed-in accountStatus: live
Parameters
datequery
Date/datetime to analyse (ISO 8601 or YYYY-MM-DD). Defaults to now.
Example: string
jdquery
Julian Day alternative to date. date takes priority.
Example: 1
latitudequery
Observer latitude (decimal degrees). With longitude, this determines chart sect from the Sun's house: a moment with the Sun below the horizon is scored as a night chart, which selects the night triplicity rulers in the dignity component. Omit either coordinate, or send an out-of-range pair, and sect falls back to diurnal — score_detail.sect_basis reports which branch ran. Void-of-course is geocentric and unaffected by location.
Example: 1
longitudequery
Observer longitude (decimal degrees). Required alongside latitude for sect: whether the Sun is above the horizon is a local fact and neither coordinate settles it alone.
Example: 1
formatquery
Output format: json (default) or llm.
Example: string
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/electional/moment-analysis"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"
Responses
200ElectionalMomentResponse
Moment analysis
422HTTPValidationError
Validation Error
POST5 calls / requestPro
Relocated Natal Angle Crossing Search
/electional/natal-angle-crossings
Find the moments a transiting body is on a relocated natal angle (AC, DC, MC, or IC) at a geographic point P — "when is this body on MY relocated angle here". A relocated natal angle is a fixed zodiacal (ecliptic-longitude) degree, computed once from the natal instant at P via the same house calculation POST /ephemeris/relocation uses — not a horizon circle that sweeps with time, which is what GET /electional/angle-crossings answers for a bare geographic point instead.
Each result is an orb window: enter (body enters orb_deg of the angle), exact (the crossing moment), and leave (body exits orb_deg). A retrograde triple pass over the same angle produces three separate windows, one per pass, each with its own enter/exact/leave/retrograde — never a single window with multiple exacts. Ranges are capped at 366 days and are rejected rather than silently truncated.
Pricing (by requested span, decided before any compute): up to 1 month (31 days) = 5, up to 3 months (92 days) = 8, up to 6 months (183 days) = 10, up to 1 year (366 days) = 12 credits. The 366-day range limit applies on every plan. A span above your plan's limit is rejected with 400 search_span_limit naming the limit and the bracket that fits — nothing is charged. Any 4xx/5xx outcome is refunded, including a 429 compute_overload shed; rate-limit 429s are refused before anything is charged. Results are capped by max_results (reported as truncated in the summary).
Chronological relocated-natal-angle crossing windows
422HTTPValidationError
Validation Error
GET5 calls / requestExplorer
Planetary Station Tracker
/electional/station-tracker
Find all retrograde and direct station dates for the specified planets in a given date range. Stations are moments when a planet appears stationary before changing direction.
API key or signed-in accountStatus: live
Parameters
start_datequery
Start date (ISO 8601 or YYYY-MM-DD). Defaults to today.
Example: string
end_datequery
End date. Defaults to 90 days after start.
Example: string
planetsquery
Comma-separated planet names: mercury, venus, mars, jupiter, saturn, uranus, neptune, pluto (sun/moon accepted, never station). Defaults to the 7 classical planets; ask for outer planets explicitly.
Example: string
formatquery
Output format: json (default) or llm.
Example: string
Copy-Paste Starter
curl -X GET "https://api.openephemeris.com/electional/station-tracker"
-H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
-H "Content-Type: application/json"