Adjust Page Text Size

API Reference

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.

First request

curl -X POST "https://api.openephemeris.com/ephemeris/natal-chart" \
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": {
      "name": "Jane Smith",
      "birth_datetime": { "iso": "1985-03-20T08:15:00" },
      "birth_location": {
        "latitude": { "decimal": 37.7749 },
        "longitude": { "decimal": -122.4194 },
        "timezone": { "iana_name": "America/Los_Angeles" }
      }
    }
  }'

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.

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.

Zodiac Frameworks

Tropical: Standard western, seasonally aligned.
Sidereal Ayanamsas: Lahiri, Fagan-Bradley, Raman, Krishnamurti, Yukteshwar.

Endpoint Guide

How to Choose the Right Endpoint

Open Ephemeris has 130+ endpoints across 20 groups. Start from what you want to build and the table below will point you to the right place.

If you want to…Start here
Generate a birth chart (planet positions, houses, aspects)Ephemeris
Know when planets change signs or form alignmentsPredictive
Compare two people's charts for compatibilityComparative
Show planetary influence lines on a world mapACG
Display a chart wheel image (SVG or PNG)Visualization
Find when the next eclipse happens (or check a past one)Eclipse
Track the Moon — sign, phase, void-of-courseLunar
Calculate a Human Design chart (type, profile, gates, channels)Human Design
Run Vedic (Jyotish) or Chinese (BaZi) calculationsVedic / Chinese
Get planting or farming calendars based on the MoonAgricultural
Find the best time to start something (electional timing)Electional
Convert a place name to latitude/longitude and timezoneLocation
Browse supported planets, house systems, or star catalogsCatalogs

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

  1. Install Node.js ≥ 18
  2. Add to your MCP config: npx -y @openephemeris/mcp-server
  3. 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

  1. Open claude.ai → Settings → Connectors → Add custom connector
  2. Paste this URL: https://mcp.openephemeris.com/mcp
  3. Leave OAuth Client ID and Secret blank — do not fill Advanced Settings
  4. 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.

ChatGPT — app directory

  1. Open Open Ephemeris in the ChatGPT app directory
  2. Click Install plugin and approve the sign-in — that creates your free account
  3. 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.

Code Examples

Official Integration Repository

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.

Tier Access

Which endpoints need which plan?

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.

After You Upgrade or Downgrade

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.

Tier Access MatrixExplorer · 118Pro · 8Startup · 1Scale · 8135 endpoints
MethodEndpointMin TierCredits
ACG14 endpoints
GET/acg/datasetsExplorer0
GET/acg/metaExplorer0
POST/acg/ccgPro10
POST/acg/hitsPro10
POST/acg/local-spacePro10
POST/acg/power-linesPro10
POST/acg/aspectsScale10
POST/acg/ccg/paransScale10
POST/acg/crossingsScale10
POST/acg/declination-linesScale10
POST/acg/hermetic-linesScale10
POST/acg/midpointsScale10
POST/acg/paransScale10
POST/acg/relational-paransScale20
calendar3 endpoints
GET/calendar/astrology/cross-quarterExplorer5
GET/calendar/astrology/lunar-standstillExplorer2
GET/calendar/astrology/moon-phasesExplorer2
catalogs3 endpoints
GET/catalogs/bodiesExplorer0
GET/catalogs/fixed-starsExplorer0
GET/catalogs/fixed-stars/groupsExplorer0
chinese12 endpoints
POST/chinese/baziExplorer1
POST/chinese/bazi/annual-pillarExplorer3
POST/chinese/bazi/chartExplorer3
POST/chinese/bazi/compatibilityExplorer3
POST/chinese/bazi/element-balanceExplorer3
POST/chinese/bazi/luck-pillarsExplorer3
POST/chinese/bazi/solar-termsExplorer3
POST/chinese/bazi/ten-godsExplorer3
POST/chinese/calendar/almanacExplorer3
POST/chinese/calendar/convertExplorer1
POST/chinese/ziweiExplorer2
GET/chinese/zodiacExplorer1
comparative5 endpoints
POST/comparative/compositeExplorer3
POST/comparative/composite/midpointExplorer3
POST/comparative/natal-transitsExplorer3
POST/comparative/overlayExplorer3
POST/comparative/synastryExplorer3
eclipse6 endpoints
GET/eclipse/besselian-elementsExplorer1
GET/eclipse/lunar/globalExplorer1
GET/eclipse/nextExplorer1
GET/eclipse/next-visibleExplorer1
GET/eclipse/solar/globalExplorer1
GET/eclipse/solar/localExplorer1
electional6 endpoints
GET/electional/moment-analysisExplorer5
GET/electional/station-trackerExplorer5
GET/electional/angle-crossingsPro5
GET/electional/aspect-searchPro5
GET/electional/find-windowPro5
POST/electional/natal-angle-crossingsPro5
agricultural3 endpoints
GET/ephemeris/agro/calendarExplorer1
GET/ephemeris/agro/dailyExplorer1
GET/ephemeris/agro/void-of-courseExplorer1
ephemeris23 endpoints
POST/ephemeris/angles-pointsExplorer1
POST/ephemeris/antisciaExplorer1
POST/ephemeris/aspect-checkExplorer1
POST/ephemeris/declinationsExplorer1
POST/ephemeris/dignitiesExplorer1
POST/ephemeris/dispositor-treeExplorer1
POST/ephemeris/draconicExplorer1
POST/ephemeris/fixed-starsExplorer1
POST/ephemeris/geodeticExplorer1
POST/ephemeris/harmonicsExplorer1
POST/ephemeris/hermetic-lotsExplorer1
POST/ephemeris/house-cuspsExplorer1
POST/ephemeris/lunar-phaseExplorer1
POST/ephemeris/midpointsExplorer1
GET/ephemeris/moon/crescent-visibilityExplorer2
POST/ephemeris/natal-chartExplorer1
POST/ephemeris/planet-positionExplorer1
POST/ephemeris/prenatal-lunationExplorer5
POST/ephemeris/relocationExplorer1
POST/ephemeris/retrograde-statusExplorer1
GET/ephemeris/sky-tonightExplorer2
POST/ephemeris/time-sensitivityExplorer2
POST/ephemeris/natal/batchStartup1
api-metadata3 endpoints
GET/ephemeris/house-systemsExplorer0
GET/ephemeris/schemas/natal-responseExplorer0
GET/ephemeris/supported-objectsExplorer0
lunar4 endpoints
GET/ephemeris/moon/aspectsExplorer1
GET/ephemeris/moon/ingressesExplorer1
GET/ephemeris/moon/phaseExplorer1
GET/ephemeris/moon/void-of-courseExplorer1
predictive16 endpoints
POST/ephemeris/progressedExplorer1
POST/mundane/chartExplorer2
POST/predictive/eclipses/natal-hitsExplorer5
POST/predictive/primary-directionsExplorer5
POST/predictive/returnsExplorer5
POST/predictive/returns/lunarExplorer5
POST/predictive/returns/solarExplorer5
POST/predictive/sky-recurrenceExplorer5
POST/predictive/time-lords/distributionsExplorer2
POST/predictive/time-lords/firdariaExplorer2
POST/predictive/time-lords/profectionsExplorer2
POST/predictive/time-lords/zodiacal-releasingExplorer2
POST/predictive/transit-chartExplorer1
POST/predictive/transits/planet-to-degreeExplorer5
POST/predictive/transits/searchExplorer5
POST/predictive/transits/sign-ingressesExplorer5
venus-cycles6 endpoints
POST/ephemeris/venus-star-pointsExplorer1
POST/ephemeris/venus-star-points/conjunctionsExplorer1
POST/ephemeris/venus-star-points/eight-year-starExplorer1
POST/ephemeris/venus-star-points/elongationsExplorer1
POST/ephemeris/venus-star-points/phaseExplorer1
POST/ephemeris/venus-star-points/stationsExplorer1
Human Design11 endpoints
POST/human-design/chartExplorer2
POST/human-design/compositeExplorer3
POST/human-design/connection-matrixExplorer6
POST/human-design/cycles/oppositionExplorer2
POST/human-design/cycles/returnExplorer2
POST/human-design/cycles/solar-returnExplorer2
POST/human-design/extendedExplorer1
POST/human-design/pentaExplorer6
POST/human-design/transitExplorer2
POST/human-design/transit-chartExplorer3
POST/human-design/transit-timelineExplorer5
location-timezone5 endpoints
GET/location/autocompleteExplorer1
GET/location/reverseExplorer1
GET/timezone/coverageExplorer1
POST/timezone/lookupExplorer1
POST/timezone/offsetExplorer1
tidal1 endpoints
GET/tidal/forcingExplorer1
Time Conversion6 endpoints
GET/time/delta-tExplorer1
GET/time/equation-of-timeExplorer1
POST/time/julian-dayExplorer1
POST/time/scalesExplorer1
GET/time/siderealExplorer1
GET/time/solar-eventExplorer1
vedic5 endpoints
POST/vedic/chartExplorer1
POST/vedic/kpExplorer1
POST/vedic/matchingExplorer2
POST/vedic/panchangExplorer1
POST/vedic/varshaphalExplorer5
visualization3 endpoints
POST/visualization/bi-wheelExplorer2
POST/visualization/bodygraphExplorer2
POST/visualization/chart-wheelExplorer2

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
▶

health

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.

API key or signed-in accountStatus: live

Parameters

formatquery

No description provided.

Example: json

Functional Request Payload

{
  "date_time": {
    "iso": "2025-12-11T12:00:00Z"
  },
  "house_system": "P",
  "latitude": 40.7128,
  "longitude": -74.006
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/angles-points"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "date_time": {
    "iso": "2025-12-11T12:00:00Z"
  },
  "house_system": "P",
  "latitude": 40.7128,
  "longitude": -74.006
}'

Responses

200AnglesPointsResponse

Angles calculated successfully

400ErrorResponse

Invalid input

422HTTPValidationError

Validation Error

500ErrorResponse

Calculation error

POST1 call / requestExplorer

Calculate antiscia and contra-antiscia

/ephemeris/antiscia

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%.

API key or signed-in accountStatus: live

Parameters

formatquery

No description provided.

Example: json

Functional Request Payload

{
  "bodies": [
    {
      "id": 0,
      "longitude": 15
    },
    {
      "id": 1,
      "longitude": 165
    },
    {
      "id": 4,
      "longitude": 225
    }
  ],
  "orb": 2
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/antiscia"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "bodies": [
    {
      "id": 0,
      "longitude": 15
    },
    {
      "id": 1,
      "longitude": 165
    },
    {
      "id": 4,
      "longitude": 225
    }
  ],
  "orb": 2
}'

Responses

200AntisciaResponse

Successful Response

400ErrorResponse

Bad Request

422

Unprocessable Entity - Invalid input format

500ErrorResponse

Internal Server Error

POST1 call / requestExplorer

Check aspects between two longitudes

/ephemeris/aspect-check

Lightweight endpoint for calculating aspects between two celestial longitudes. Supports filtering by aspect type and custom orb limits.

API key or signed-in accountStatus: live

Parameters

formatquery

No description provided.

Example: json

Functional Request Payload

{
  "aspect_types": [
    "conjunction",
    "opposition",
    "square",
    "trine"
  ],
  "longitude1": 120,
  "longitude2": 180,
  "max_orb": 6
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/aspect-check"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "aspect_types": [
    "conjunction",
    "opposition",
    "square",
    "trine"
  ],
  "longitude1": 120,
  "longitude2": 180,
  "max_orb": 6
}'

Responses

200AspectCheckResponse

Aspects calculated successfully

400ErrorResponse

Invalid input (e.g., longitude out of range)

422HTTPValidationError

Validation Error

500ErrorResponse

Calculation error

POST1 call / requestExplorer

Out-of-Bounds Declination Analysis

/ephemeris/declinations

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.

API key or signed-in accountStatus: live

Parameters

formatquery

Response format: json | llm.

Example: json

Functional Request Payload

{
  "bodies": [
    {
      "id": 1,
      "latitude": 1,
      "longitude": 1
    }
  ],
  "obliquity": 23.4393,
  "parallel_orb": 1
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/declinations"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "bodies": [
    {
      "id": 1,
      "latitude": 1,
      "longitude": 1
    }
  ],
  "obliquity": 23.4393,
  "parallel_orb": 1
}'

Responses

200DeclinationAnalysisResponse

Successful Response

422ErrorResponse

Unprocessable Entity - Invalid input

500ErrorResponse

Internal Server Error

POST1 call / requestExplorer

Calculate essential dignities (granular)

/ephemeris/dignities

Mechanical endpoint returning essential dignity scores for Sun..Pluto.

API key or signed-in accountStatus: live

Parameters

formatquery

No description provided.

Example: json

Functional Request Payload

{
  "date_time": {
    "iso": "2025-12-11T12:00:00Z"
  },
  "latitude": 40.7128,
  "longitude": -74.006
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/dignities"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "date_time": {
    "iso": "2025-12-11T12:00:00Z"
  },
  "latitude": 40.7128,
  "longitude": -74.006
}'

Responses

200DignitiesResponse

Dignities calculated successfully

400ErrorResponse

Invalid input

422HTTPValidationError

Validation Error

500ErrorResponse

Calculation error

POST1 call / requestExplorer

Build dispositor tree from planetary placements

/ephemeris/dispositor-tree

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.

API key or signed-in accountStatus: live

Parameters

formatquery

No description provided.

Example: json

Functional Request Payload

{
  "planets": [
    {
      "planet_id": 1,
      "sign": 1
    }
  ]
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/dispositor-tree"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "planets": [
    {
      "planet_id": 1,
      "sign": 1
    }
  ]
}'

Responses

200DispositorTreeResponse

Successful Response

400ErrorResponse

Bad Request

422

Unprocessable Entity - Invalid input format

500ErrorResponse

Internal Server Error

POST1 call / requestExplorer

Calculate Draconic Chart

/ephemeris/draconic

Calculates draconic chart with True Node as 0 Aries.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "subject": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "John Doe"
  },
  "body_ids": [
    1
  ],
  "format": "json",
  "include_visual": false,
  "visual_config": {
    "format": "svg",
    "layout": "graph",
    "size": 800,
    "theme": "light"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/draconic"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "subject": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "John Doe"
  },
  "body_ids": [
    1
  ],
  "format": "json",
  "include_visual": false,
  "visual_config": {
    "format": "svg",
    "layout": "graph",
    "size": 800,
    "theme": "light"
  }
}'

Responses

200

Successful Response

422HTTPValidationError

Validation Error

POST1 call / requestExplorer

Fixed star position calculations

/ephemeris/fixed-stars

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%.

API key or signed-in accountStatus: live

Parameters

formatquery

No description provided.

Example: json

Functional Request Payload

{
  "date_time": {
    "iso": "2023-12-07T15:30:00Z"
  },
  "latitude": 32.7767,
  "longitude": -96.797,
  "orb": 1,
  "star_names": [
    "Regulus",
    "Spica",
    "Aldebaran"
  ]
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/fixed-stars"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "date_time": {
    "iso": "2023-12-07T15:30:00Z"
  },
  "latitude": 32.7767,
  "longitude": -96.797,
  "orb": 1,
  "star_names": [
    "Regulus",
    "Spica",
    "Aldebaran"
  ]
}'

Responses

200FixedStarsCalculationResponse

Successful Response

400ErrorResponse

Bad Request

422

Unprocessable Entity - Invalid input format

500ErrorResponse

Internal Server Error

POST1 call / requestExplorer

Geodetic Chart

/ephemeris/geodetic

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "date_time": {
    "iso": "2021-05-10T12:00:00+03:00"
  },
  "house_system": "P",
  "include": [
    "planets",
    "contacts"
  ],
  "latitude": 31.7683,
  "longitude": 35.2137,
  "orb_deg": 2
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/geodetic"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "date_time": {
    "iso": "2021-05-10T12:00:00+03:00"
  },
  "house_system": "P",
  "include": [
    "planets",
    "contacts"
  ],
  "latitude": 31.7683,
  "longitude": 35.2137,
  "orb_deg": 2
}'

Responses

200GeodeticResponse

Successful Response

422HTTPValidationError

Validation Error

POST1 call / requestExplorer

Harmonic Chart Analysis

/ephemeris/harmonics

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.

API key or signed-in accountStatus: live

Parameters

formatquery

Response format: json | llm.

Example: json

Functional Request Payload

{
  "bodies": [
    {
      "id": 1,
      "longitude": 1
    }
  ],
  "harmonic": 1,
  "orb": 8
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/harmonics"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "bodies": [
    {
      "id": 1,
      "longitude": 1
    }
  ],
  "harmonic": 1,
  "orb": 8
}'

Responses

200HarmonicsResponse

Successful Response

422HTTPValidationError

Validation Error

500ErrorResponse

Internal Server Error

POST1 call / requestExplorer

Calculate Hermetic lots for datetime and location

/ephemeris/hermetic-lots

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.

API key or signed-in accountStatus: live

Parameters

formatquery

No description provided.

Example: json

Functional Request Payload

{
  "date_time": {
    "iso": "1985-06-15T14:30:00Z"
  },
  "include_legacy": false,
  "include_optional": false,
  "latitude": 40.7128,
  "longitude": -74.006
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/hermetic-lots"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "date_time": {
    "iso": "1985-06-15T14:30:00Z"
  },
  "include_legacy": false,
  "include_optional": false,
  "latitude": 40.7128,
  "longitude": -74.006
}'

Responses

200HermeticLotsCalculationResponse

Successful Response

400ErrorResponse

Bad Request

422

Unprocessable Entity - Invalid input format

500ErrorResponse

Internal Server Error

POST1 call / requestExplorer

Calculate house cusps (granular)

/ephemeris/house-cusps

Mechanical endpoint returning house cusps for up to 5 house systems.

API key or signed-in accountStatus: live

Parameters

formatquery

No description provided.

Example: json

Functional Request Payload

{
  "date_time": {
    "iso": "2025-12-11T12:00:00Z"
  },
  "house_systems": [
    "P",
    "W"
  ],
  "latitude": 40.7128,
  "longitude": -74.006
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/house-cusps"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "date_time": {
    "iso": "2025-12-11T12:00:00Z"
  },
  "house_systems": [
    "P",
    "W"
  ],
  "latitude": 40.7128,
  "longitude": -74.006
}'

Responses

200HouseCuspsResponse

House cusps calculated successfully

400ErrorResponse

Invalid input

422HTTPValidationError

Validation Error

500ErrorResponse

Calculation error

POST1 call / requestExplorer

Calculate lunar phase for datetime

/ephemeris/lunar-phase

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%.

API key or signed-in accountStatus: live

Parameters

formatquery

No description provided.

Example: json

Functional Request Payload

{
  "date_time": {
    "iso": "2025-12-11T12:00:00Z"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/lunar-phase"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "date_time": {
    "iso": "2025-12-11T12:00:00Z"
  }
}'

Responses

200LunarPhaseCalculationResponse

Successful Response

400ErrorResponse

Bad Request

422

Unprocessable Entity - Invalid input format

500ErrorResponse

Internal Server Error

POST1 call / requestExplorer

Calculate midpoints for datetime

/ephemeris/midpoints

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.

API key or signed-in accountStatus: live

Parameters

formatquery

No description provided.

Example: json

Functional Request Payload

{
  "arc_type": "short",
  "date_time": {
    "iso": "2023-12-07T15:30:00Z"
  },
  "include_angles": true,
  "include_occupied": false,
  "latitude": 40.7128,
  "longitude": -74.006
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/midpoints"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "arc_type": "short",
  "date_time": {
    "iso": "2023-12-07T15:30:00Z"
  },
  "include_angles": true,
  "include_occupied": false,
  "latitude": 40.7128,
  "longitude": -74.006
}'

Responses

200MidpointsCalculationResponse

Successful Response

400ErrorResponse

Bad Request

422

Unprocessable Entity - Invalid input format

500ErrorResponse

Internal Server Error

GET2 calls / requestExplorer

Crescent Moon Visibility

/ephemeris/moon/crescent-visibility

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%.

API key or signed-in accountStatus: live

Parameters

formatquery

Response format: json | llm. Controls response projection only.

Example: json

Functional Request Payload

{
  "configuration": {
    "ayanamsa": "lahiri",
    "coordinate_frame": "equatorial",
    "coordinate_system": "topocentric",
    "house_system": "W",
    "object_set": "asteroids_major",
    "zodiac_type": "sidereal"
  },
  "subject": {
    "birth_datetime": {
      "iso": "1985-03-20T08:15:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 37.7749
      },
      "longitude": {
        "decimal": -122.4194
      },
      "timezone": {
        "iana_name": "America/Los_Angeles"
      }
    },
    "name": "Jane Smith"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/natal-chart"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "configuration": {
    "ayanamsa": "lahiri",
    "coordinate_frame": "equatorial",
    "coordinate_system": "topocentric",
    "house_system": "W",
    "object_set": "asteroids_major",
    "zodiac_type": "sidereal"
  },
  "subject": {
    "birth_datetime": {
      "iso": "1985-03-20T08:15:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 37.7749
      },
      "longitude": {
        "decimal": -122.4194
      },
      "timezone": {
        "iana_name": "America/Los_Angeles"
      }
    },
    "name": "Jane Smith"
  }
}'

Responses

200NatalChartEnhancedResponse

Successful enhanced chart calculation

400ErrorResponse

Input validation error

422

Unprocessable Entity - Invalid input format

500ErrorResponse

Chart calculation error

POST1 call / requestStartup

Batch natal calculations

/ephemeris/natal/batch

Compute multiple natal charts in a single request with shared guardrails. 🤖 AI-optimized output available — add format=llm to reduce payload ~80%.

API key or signed-in accountStatus: live

Parameters

formatquery

No description provided.

Example: json

Functional Request Payload

{
  "format": "json",
  "items": [
    {
      "configuration": {
        "coordinate_frame": "ecliptic",
        "coordinate_system": "geocentric",
        "house_system": "W",
        "object_set": "modern_plus_chiron",
        "zodiac_type": "tropical"
      },
      "subject": {
        "birth_datetime": {
          "iso": "1992-01-10T04:15:00"
        },
        "birth_location": {
          "latitude": {
            "decimal": 40
          },
          "longitude": {
            "decimal": -74
          },
          "timezone": {
            "iana_name": "America/New_York"
          }
        },
        "name": "Batch Subject 1"
      }
    },
    {
      "subject": {
        "birth_datetime": {
          "iso": "1988-07-22T19:45:00"
        },
        "birth_location": {
          "latitude": {
            "decimal": 34.0522
          },
          "longitude": {
            "decimal": -118.2437
          },
          "timezone": {
            "iana_name": "America/Los_Angeles"
          }
        },
        "name": "Batch Subject 2"
      }
    }
  ],
  "limits": {
    "max_subjects": 10
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/natal/batch"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "format": "json",
  "items": [
    {
      "configuration": {
        "coordinate_frame": "ecliptic",
        "coordinate_system": "geocentric",
        "house_system": "W",
        "object_set": "modern_plus_chiron",
        "zodiac_type": "tropical"
      },
      "subject": {
        "birth_datetime": {
          "iso": "1992-01-10T04:15:00"
        },
        "birth_location": {
          "latitude": {
            "decimal": 40
          },
          "longitude": {
            "decimal": -74
          },
          "timezone": {
            "iana_name": "America/New_York"
          }
        },
        "name": "Batch Subject 1"
      }
    },
    {
      "subject": {
        "birth_datetime": {
          "iso": "1988-07-22T19:45:00"
        },
        "birth_location": {
          "latitude": {
            "decimal": 34.0522
          },
          "longitude": {
            "decimal": -118.2437
          },
          "timezone": {
            "iana_name": "America/Los_Angeles"
          }
        },
        "name": "Batch Subject 2"
      }
    }
  ],
  "limits": {
    "max_subjects": 10
  }
}'

Responses

200NatalBatchResponse

Successful Response

400ErrorResponse

Bad Request

422

Unprocessable Entity - Invalid input format

500ErrorResponse

Internal Server Error

POST1 call / requestExplorer

Get single planet position

/ephemeris/planet-position

Lightweight endpoint for retrieving a single planet's position at a specific time. Supports both geocentric (default) and topocentric (with latitude/longitude) calculations.

API key or signed-in accountStatus: live

Parameters

formatquery

No description provided.

Example: json

Functional Request Payload

{
  "date_time": {
    "iso": "2025-12-11T12:00:00Z"
  },
  "latitude": 40.7128,
  "longitude": -74.006,
  "planet_id": 0
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/planet-position"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "date_time": {
    "iso": "2025-12-11T12:00:00Z"
  },
  "latitude": 40.7128,
  "longitude": -74.006,
  "planet_id": 0
}'

Responses

200PlanetPositionResponse

Planet position calculated successfully

400ErrorResponse

Invalid input (e.g., unknown planet_id)

422HTTPValidationError

Validation Error

500ErrorResponse

Calculation error

POST5 calls / requestExplorer

Calculate Prenatal Lunation

/ephemeris/prenatal-lunation

Calculates the prenatal new and full moon for a subject.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "birth_datetime": "string",
  "latitude": 1,
  "longitude": 1,
  "format": "json",
  "house_system": "string",
  "include": [
    "string"
  ],
  "max_age_years": 100
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/prenatal-lunation"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "birth_datetime": "string",
  "latitude": 1,
  "longitude": 1,
  "format": "json",
  "house_system": "string",
  "include": [
    "string"
  ],
  "max_age_years": 100
}'

Responses

200

Successful Response

422HTTPValidationError

Validation Error

POST1 call / requestExplorer

Calculate relocation chart

/ephemeris/relocation

Return angles, house cusps, and planet house changes for a relocated chart. 🤖 AI-optimized output available — add format=llm to reduce payload ~55%.

API key or signed-in accountStatus: beta

Parameters

formatquery

Response format: json | llm.

Example: string

Functional Request Payload

{
  "house_system": "P",
  "natal": {
    "subject": {
      "birth_datetime": {
        "iso": "1990-01-01T12:00:00Z"
      },
      "birth_location": {
        "latitude": {
          "decimal": 34.0522
        },
        "longitude": {
          "decimal": -118.2437
        },
        "timezone": {
          "iana_name": "America/Los_Angeles"
        }
      },
      "name": "Relocation Client"
    }
  },
  "relocation_lat": 40.7128,
  "relocation_lon": -74.006
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/relocation"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "house_system": "P",
  "natal": {
    "subject": {
      "birth_datetime": {
        "iso": "1990-01-01T12:00:00Z"
      },
      "birth_location": {
        "latitude": {
          "decimal": 34.0522
        },
        "longitude": {
          "decimal": -118.2437
        },
        "timezone": {
          "iana_name": "America/Los_Angeles"
        }
      },
      "name": "Relocation Client"
    }
  },
  "relocation_lat": 40.7128,
  "relocation_lon": -74.006
}'

Responses

200RelocationResponse

Successful Response

400

Bad Request - Input validation failed

422

Unprocessable Entity - Invalid input format

500

Internal Server Error - Calculation failed

Example Success Response

{
  "angles": {
    "asc": {
      "longitude": 123.45,
      "sign": "Leo",
      "sign_longitude": 3.45,
      "sign_symbol": "Leo"
    },
    "dsc": {
      "longitude": 303.45,
      "sign": "Aquarius",
      "sign_longitude": 3.45,
      "sign_symbol": "Aquarius"
    },
    "ic": {
      "longitude": 30.1,
      "sign": "Taurus",
      "sign_longitude": 0.1,
      "sign_symbol": "Taurus"
    },
    "mc": {
      "longitude": 210.1,
      "sign": "Scorpio",
      "sign_longitude": 0.1,
      "sign_symbol": "Scorpio"
    }
  },
  "calculation_metadata": {
    "coordinate_system": "geocentric",
    "ephemeris_source": "SuperNOVAS / Calceph",
    "zodiac_type": "tropical"
  },
  "houses": [
    {
      "index": 1,
      "longitude": 123.45,
      "sign": "Leo",
      "sign_longitude": 3.45,
      "size": 30
    },
    {
      "index": 2,
      "longitude": 153.45,
      "sign": "Virgo",
      "sign_longitude": 3.45,
      "size": 28.7
    }
  ],
  "metadata": {
    "calculation_source": "SuperNOVAS / Calceph",
    "house_system": "P",
    "natal_house_system": "P",
    "observer_location": {
      "latitude": 40.7128,
      "longitude": -74.006
    },
    "reference_frame": "geocentric_ecliptic_J2000",
    "requested_house_system": "P",
    "time_system": "UTC",
    "topocentric_flag": false
  },
  "planet_house_changes": [
    {
      "body": "Sun",
      "from_house": 10,
      "to_house": 9
    },
    {
      "body": "Venus",
      "from_house": 7,
      "to_house": 8
    }
  ],
  "success": true,
  "summary": {
    "changed_houses": 12,
    "changed_planets": 2,
    "notes": "Relocated using Placidus; planetary longitudes unchanged."
  }
}
POST1 call / requestExplorer

Check planet retrograde status

/ephemeris/retrograde-status

Lightweight endpoint for determining whether a planet is retrograde at a specific time. Returns motion type (direct/retrograde/stationary) and speed data.

API key or signed-in accountStatus: live

Parameters

formatquery

No description provided.

Example: json

Functional Request Payload

{
  "date_time": {
    "iso": "2025-12-11T12:00:00Z"
  },
  "planet_id": 2
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/retrograde-status"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "date_time": {
    "iso": "2025-12-11T12:00:00Z"
  },
  "planet_id": 2
}'

Responses

200RetrogradeStatusResponse

Retrograde status determined successfully

400ErrorResponse

Invalid input (e.g., unknown planet_id)

422HTTPValidationError

Validation Error

500ErrorResponse

Calculation error

GET2 calls / requestExplorer

Sky Tonight

/ephemeris/sky-tonight

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "include": [
    "angles",
    "houses",
    "planets"
  ],
  "subject": {
    "birth_datetime": {
      "iso": "1990-04-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 41.8781
      },
      "longitude": {
        "decimal": -87.6298
      },
      "timezone": {
        "iana_name": "America/Chicago"
      }
    }
  },
  "window": {
    "minutes_after": 30,
    "minutes_before": 30
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/time-sensitivity"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "include": [
    "angles",
    "houses",
    "planets"
  ],
  "subject": {
    "birth_datetime": {
      "iso": "1990-04-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 41.8781
      },
      "longitude": {
        "decimal": -87.6298
      },
      "timezone": {
        "iana_name": "America/Chicago"
      }
    }
  },
  "window": {
    "minutes_after": 30,
    "minutes_before": 30
  }
}'

Responses

200TimeSensitivityResponse

Successful Response

422HTTPValidationError

Validation Error

▶

predictive

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%.

API key or signed-in accountStatus: live

Parameters

formatquery

Response format: json | llm.

Example: json

Functional Request Payload

{
  "configuration": {
    "house_system": "P",
    "object_set": "asteroids_major",
    "zodiac_type": "tropical"
  },
  "options": {
    "include_aspects": true,
    "include_declination_aspects": true
  },
  "progression_options": {
    "day_year_ratio": 1,
    "method": "secondary"
  },
  "subject": {
    "birth_datetime": {
      "iso": "1990-01-01T12:00:00Z"
    },
    "birth_location": {
      "latitude": {
        "decimal": 34.0522
      },
      "longitude": {
        "decimal": -118.2437
      },
      "timezone": {
        "iana_name": "America/Los_Angeles"
      }
    },
    "name": "Secondary Progression Example"
  },
  "target_datetime": {
    "iso": "2025-11-06T00:00:00Z"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/progressed"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "configuration": {
    "house_system": "P",
    "object_set": "asteroids_major",
    "zodiac_type": "tropical"
  },
  "options": {
    "include_aspects": true,
    "include_declination_aspects": true
  },
  "progression_options": {
    "day_year_ratio": 1,
    "method": "secondary"
  },
  "subject": {
    "birth_datetime": {
      "iso": "1990-01-01T12:00:00Z"
    },
    "birth_location": {
      "latitude": {
        "decimal": 34.0522
      },
      "longitude": {
        "decimal": -118.2437
      },
      "timezone": {
        "iana_name": "America/Los_Angeles"
      }
    },
    "name": "Secondary Progression Example"
  },
  "target_datetime": {
    "iso": "2025-11-06T00:00:00Z"
  }
}'

Responses

200ProgressedChartResponse

Successful progressed chart calculation

400ErrorResponse

Input validation error

422

Unprocessable Entity - Invalid input format

500ErrorResponse

Calculation or internal error

POST2 calls / requestExplorer

Mundane Chart

/mundane/chart

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "event": {
    "sign": "aries",
    "type": "sign_ingress",
    "year": 2027
  },
  "house_system": "P",
  "latitude": 38.8951,
  "longitude": -77.0364
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/mundane/chart"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "event": {
    "sign": "aries",
    "type": "sign_ingress",
    "year": 2027
  },
  "house_system": "P",
  "latitude": 38.8951,
  "longitude": -77.0364
}'

Responses

200MundaneChartResponse

Successful Response

422HTTPValidationError

Validation Error

POST5 calls / requestExplorer

Eclipses That Hit a Natal Chart

/predictive/eclipses/natal-hits

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "end_date": "2026-01-01T00:00:00Z",
  "location": {
    "latitude": 22.5726,
    "longitude": 88.3639
  },
  "natal_points": [
    {
      "longitude": 344.5,
      "name": "Sun"
    },
    {
      "longitude": 172,
      "name": "ASC"
    }
  ],
  "start_date": "2025-01-01T00:00:00Z"
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/predictive/eclipses/natal-hits"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "end_date": "2026-01-01T00:00:00Z",
  "location": {
    "latitude": 22.5726,
    "longitude": 88.3639
  },
  "natal_points": [
    {
      "longitude": 344.5,
      "name": "Sun"
    },
    {
      "longitude": 172,
      "name": "ASC"
    }
  ],
  "start_date": "2025-01-01T00:00:00Z"
}'

Responses

200EclipseNatalHitsResponse

Successful Response

422ErrorResponse

Unprocessable Entity - Invalid input

POST5 calls / requestExplorer

Calculate Primary Directions

/predictive/primary-directions

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "subject": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "John Doe"
  },
  "format": "json",
  "fortune_formula": "sect",
  "include_aspects": [
    0,
    60,
    90,
    120,
    180
  ],
  "include_converse": false,
  "max_age_years": 90,
  "methods": [
    "placidus_mundane",
    "placidus_zodiacal"
  ]
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/predictive/primary-directions"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "subject": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "John Doe"
  },
  "format": "json",
  "fortune_formula": "sect",
  "include_aspects": [
    0,
    60,
    90,
    120,
    180
  ],
  "include_converse": false,
  "max_age_years": 90,
  "methods": [
    "placidus_mundane",
    "placidus_zodiacal"
  ]
}'

Responses

200

Successful Response

422HTTPValidationError

Validation Error

POST5 calls / requestExplorer

Calculate Planetary Return Timing

/predictive/returns

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%.

API key or signed-in accountStatus: live

Parameters

formatquery

Response format: json | llm.

Example: json

include_aspectsquery

No description provided.

Example: true

include_hermetic_lotsquery

No description provided.

Example: true

Functional Request Payload

{
  "birth_datetime": {
    "iso": "1990-06-15T14:30:00Z"
  },
  "body": "Sun",
  "house_system": "P",
  "location": {
    "elevation": 10,
    "latitude": {
      "decimal": 40.7128
    },
    "longitude": {
      "decimal": -74.006
    },
    "timezone": {
      "iana_name": "UTC"
    }
  },
  "return_location": {
    "elevation": 71,
    "latitude": {
      "decimal": 34.0522
    },
    "longitude": {
      "decimal": -118.2437
    },
    "timezone": {
      "iana_name": "UTC"
    }
  },
  "search_window_days": 5,
  "target_datetime": {
    "iso": "2024-06-15T00:00:00Z"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/predictive/returns"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "birth_datetime": {
    "iso": "1990-06-15T14:30:00Z"
  },
  "body": "Sun",
  "house_system": "P",
  "location": {
    "elevation": 10,
    "latitude": {
      "decimal": 40.7128
    },
    "longitude": {
      "decimal": -74.006
    },
    "timezone": {
      "iana_name": "UTC"
    }
  },
  "return_location": {
    "elevation": 71,
    "latitude": {
      "decimal": 34.0522
    },
    "longitude": {
      "decimal": -118.2437
    },
    "timezone": {
      "iana_name": "UTC"
    }
  },
  "search_window_days": 5,
  "target_datetime": {
    "iso": "2024-06-15T00:00:00Z"
  }
}'

Responses

200PlanetaryReturnResponse

Successful Response

400ErrorResponse

Bad Request - Input validation failed

404ErrorResponse

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

Calculate Lunar Return Timing

/predictive/returns/lunar

Calculate the nearest lunar return timing (Moon returns to its natal longitude) near a target datetime.

API key or signed-in accountStatus: live

Parameters

formatquery

Response format: json | llm.

Example: json

include_aspectsquery

No description provided.

Example: true

include_hermetic_lotsquery

No description provided.

Example: true

Functional Request Payload

{
  "birth_datetime": {
    "iso": "1990-06-15T14:30:00Z"
  },
  "house_system": "P",
  "location": {
    "elevation": 10,
    "latitude": {
      "decimal": 40.7128
    },
    "longitude": {
      "decimal": -74.006
    },
    "timezone": {
      "iana_name": "UTC"
    }
  },
  "return_location": {
    "elevation": 71,
    "latitude": {
      "decimal": 34.0522
    },
    "longitude": {
      "decimal": -118.2437
    },
    "timezone": {
      "iana_name": "UTC"
    }
  },
  "search_window_days": 30,
  "target_datetime": {
    "iso": "2024-06-15T00:00:00Z"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/predictive/returns/lunar"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "birth_datetime": {
    "iso": "1990-06-15T14:30:00Z"
  },
  "house_system": "P",
  "location": {
    "elevation": 10,
    "latitude": {
      "decimal": 40.7128
    },
    "longitude": {
      "decimal": -74.006
    },
    "timezone": {
      "iana_name": "UTC"
    }
  },
  "return_location": {
    "elevation": 71,
    "latitude": {
      "decimal": 34.0522
    },
    "longitude": {
      "decimal": -118.2437
    },
    "timezone": {
      "iana_name": "UTC"
    }
  },
  "search_window_days": 30,
  "target_datetime": {
    "iso": "2024-06-15T00:00:00Z"
  }
}'

Responses

200LunarReturnResponse

Successful Response

400ErrorResponse

Bad Request - Input validation failed

404ErrorResponse

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

Calculate Solar Return Timing

/predictive/returns/solar

Calculate the nearest solar return timing (Sun returns to its natal longitude) near a target datetime.

API key or signed-in accountStatus: live

Parameters

formatquery

Response format: json | llm.

Example: json

include_aspectsquery

No description provided.

Example: true

include_hermetic_lotsquery

No description provided.

Example: true

Functional Request Payload

{
  "birth_datetime": {
    "iso": "1990-06-15T14:30:00Z"
  },
  "house_system": "P",
  "location": {
    "elevation": 10,
    "latitude": {
      "decimal": 40.7128
    },
    "longitude": {
      "decimal": -74.006
    },
    "timezone": {
      "iana_name": "UTC"
    }
  },
  "return_location": {
    "elevation": 71,
    "latitude": {
      "decimal": 34.0522
    },
    "longitude": {
      "decimal": -118.2437
    },
    "timezone": {
      "iana_name": "UTC"
    }
  },
  "search_window_days": 5,
  "target_datetime": {
    "iso": "2024-06-15T00:00:00Z"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/predictive/returns/solar"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "birth_datetime": {
    "iso": "1990-06-15T14:30:00Z"
  },
  "house_system": "P",
  "location": {
    "elevation": 10,
    "latitude": {
      "decimal": 40.7128
    },
    "longitude": {
      "decimal": -74.006
    },
    "timezone": {
      "iana_name": "UTC"
    }
  },
  "return_location": {
    "elevation": 71,
    "latitude": {
      "decimal": 34.0522
    },
    "longitude": {
      "decimal": -118.2437
    },
    "timezone": {
      "iana_name": "UTC"
    }
  },
  "search_window_days": 5,
  "target_datetime": {
    "iso": "2024-06-15T00:00:00Z"
  }
}'

Responses

200SolarReturnResponse

Successful Response

400ErrorResponse

Bad Request - Input validation failed

404ErrorResponse

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).

API key or signed-in accountStatus: live

Functional Request Payload

{
  "birth_datetime": {
    "iso": "2023-12-07T15:30:00Z"
  },
  "bodies": [
    "string"
  ],
  "end_date": "string",
  "orb_deg": 10,
  "start_date": "string",
  "timezone": "string",
  "zodiac_type": "tropical"
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/predictive/sky-recurrence"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "birth_datetime": {
    "iso": "2023-12-07T15:30:00Z"
  },
  "bodies": [
    "string"
  ],
  "end_date": "string",
  "orb_deg": 10,
  "start_date": "string",
  "timezone": "string",
  "zodiac_type": "tropical"
}'

Responses

200

Successful Response

422ErrorResponse

Unprocessable Entity - Invalid input

500ErrorResponse

Internal Server Error

POST2 calls / requestExplorer

Distribution Through the Bounds

/predictive/time-lords/distributions

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "subject": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "John Doe"
  },
  "format": "string",
  "key": "ptolemy",
  "max_age_years": 100,
  "method": "ascensional_times",
  "releaser": "asc",
  "target_datetime": {
    "iso": "2023-12-07T15:30:00Z"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/predictive/time-lords/distributions"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "subject": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "John Doe"
  },
  "format": "string",
  "key": "ptolemy",
  "max_age_years": 100,
  "method": "ascensional_times",
  "releaser": "asc",
  "target_datetime": {
    "iso": "2023-12-07T15:30:00Z"
  }
}'

Responses

200

Successful Response

422ErrorResponse

Unprocessable Entity - Invalid input

500ErrorResponse

Internal Server Error

POST2 calls / requestExplorer

Firdaria Planetary Periods

/predictive/time-lords/firdaria

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.

API key or signed-in accountStatus: live

Parameters

formatquery

Response format: json | llm.

Example: json

Functional Request Payload

{
  "birth_datetime": "2025-01-01T00:00:00Z",
  "is_day_birth": true,
  "house_system": "string",
  "latitude": -90,
  "longitude": -180,
  "target_datetime": "2025-01-01T00:00:00Z"
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/predictive/time-lords/firdaria"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "birth_datetime": "2025-01-01T00:00:00Z",
  "is_day_birth": true,
  "house_system": "string",
  "latitude": -90,
  "longitude": -180,
  "target_datetime": "2025-01-01T00:00:00Z"
}'

Responses

200FirdariaResponse

Successful Response

422ErrorResponse

Unprocessable Entity - Invalid input

500ErrorResponse

Internal Server Error

POST2 calls / requestExplorer

Annual Profections Time Lords

/predictive/time-lords/profections

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.

API key or signed-in accountStatus: live

Parameters

formatquery

Response format: json | llm.

Example: json

Functional Request Payload

{
  "ascendant_sign": 0,
  "birth_datetime": "2025-01-01T00:00:00Z",
  "house_system": "string",
  "latitude": -90,
  "longitude": -180,
  "target_datetime": "2025-01-01T00:00:00Z",
  "years_backward": 5
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/predictive/time-lords/profections"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "ascendant_sign": 0,
  "birth_datetime": "2025-01-01T00:00:00Z",
  "house_system": "string",
  "latitude": -90,
  "longitude": -180,
  "target_datetime": "2025-01-01T00:00:00Z",
  "years_backward": 5
}'

Responses

200ProfectionsResponse

Successful Response

422ErrorResponse

Unprocessable Entity - Invalid input

500ErrorResponse

Internal Server Error

POST2 calls / requestExplorer

Zodiacal Releasing Time Lords

/predictive/time-lords/zodiacal-releasing

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.

API key or signed-in accountStatus: live

Parameters

formatquery

Response format: json | llm.

Example: json

Functional Request Payload

{
  "birth_datetime": "2025-01-01T00:00:00Z",
  "lot_name": "fortune",
  "lot_sign": 0,
  "house_system": "string",
  "latitude": -90,
  "longitude": -180,
  "max_years": 100
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/predictive/time-lords/zodiacal-releasing"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "birth_datetime": "2025-01-01T00:00:00Z",
  "lot_name": "fortune",
  "lot_sign": 0,
  "house_system": "string",
  "latitude": -90,
  "longitude": -180,
  "max_years": 100
}'

Responses

200ZodiacalReleasingResponse

Successful Response

422ErrorResponse

Unprocessable Entity - Invalid input

500ErrorResponse

Internal Server Error

POST1 call / requestExplorer

Calculate transit chart (full chart snapshot)

/predictive/transit-chart

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%.

API key or signed-in accountStatus: live

Parameters

formatquery

Response format: json | llm. Controls response projection only.

Example: json

Functional Request Payload

{
  "configuration": {
    "ayanamsa": "lahiri",
    "coordinate_frame": "equatorial",
    "coordinate_system": "topocentric",
    "house_system": "W",
    "object_set": "asteroids_major",
    "zodiac_type": "sidereal"
  },
  "subject": {
    "birth_datetime": {
      "iso": "1985-03-20T08:15:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 37.7749
      },
      "longitude": {
        "decimal": -122.4194
      },
      "timezone": {
        "iana_name": "America/Los_Angeles"
      }
    },
    "name": "Jane Smith"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/predictive/transit-chart"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "configuration": {
    "ayanamsa": "lahiri",
    "coordinate_frame": "equatorial",
    "coordinate_system": "topocentric",
    "house_system": "W",
    "object_set": "asteroids_major",
    "zodiac_type": "sidereal"
  },
  "subject": {
    "birth_datetime": {
      "iso": "1985-03-20T08:15:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 37.7749
      },
      "longitude": {
        "decimal": -122.4194
      },
      "timezone": {
        "iana_name": "America/Los_Angeles"
      }
    },
    "name": "Jane Smith"
  }
}'

Responses

200EnhancedChartSuccessResponse

Successful Response

400ErrorResponse

Bad Request - Input validation failed

422ErrorResponse

Unprocessable Entity - Invalid input format

429ErrorResponse

Rate Limit Exceeded - Too many requests

500ErrorResponse

Internal Server Error - Calculation failed

POST5 calls / requestExplorer

Calculate Planetary Transit to Degree

/predictive/transits/planet-to-degree

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

API key or signed-in accountStatus: live

Functional Request Payload

{
  "max_crossings": 3,
  "planet_name": "Mars",
  "start_date": "2024-01-01T00:00:00Z",
  "target_degree": 15.5
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/predictive/transits/planet-to-degree"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "max_crossings": 3,
  "planet_name": "Mars",
  "start_date": "2024-01-01T00:00:00Z",
  "target_degree": 15.5
}'

Responses

200PlanetTransitResponse

Successful Response

400ErrorResponse

Bad Request - Input validation failed

422ErrorResponse

Unprocessable Entity - Invalid input format

429ErrorResponse

Rate Limit Exceeded - Too many requests

500ErrorResponse

Internal Server Error - Calculation failed

POST5 calls / requestExplorer

Search Transit Events

/predictive/transits/search

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "end_date": "2025-01-01T00:00:00Z",
  "planet_names": [
    "Mars",
    "Jupiter"
  ],
  "start_date": "2024-01-01T00:00:00Z",
  "target_degrees": [
    0,
    90,
    180,
    270
  ]
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/predictive/transits/search"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "end_date": "2025-01-01T00:00:00Z",
  "planet_names": [
    "Mars",
    "Jupiter"
  ],
  "start_date": "2024-01-01T00:00:00Z",
  "target_degrees": [
    0,
    90,
    180,
    270
  ]
}'

Responses

200TransitSearchResponse

Successful Response

400ErrorResponse

Bad Request - Input validation failed

422ErrorResponse

Unprocessable Entity - Invalid input format

429ErrorResponse

Rate Limit Exceeded - Too many requests

500ErrorResponse

Internal Server Error - Calculation failed

POST5 calls / requestExplorer

Calculate Sign Ingresses

/predictive/transits/sign-ingresses

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

API key or signed-in accountStatus: live

Functional Request Payload

{
  "end_date": "2025-01-01T00:00:00Z",
  "planet_names": [
    "Mars",
    "Jupiter"
  ],
  "start_date": "2024-01-01T00:00:00Z",
  "target_sign": "Aries"
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/predictive/transits/sign-ingresses"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "end_date": "2025-01-01T00:00:00Z",
  "planet_names": [
    "Mars",
    "Jupiter"
  ],
  "start_date": "2024-01-01T00:00:00Z",
  "target_sign": "Aries"
}'

Responses

200SignIngressResponse

Successful Response

400ErrorResponse

Bad Request - Input validation failed

422ErrorResponse

Unprocessable Entity - Invalid input format

429ErrorResponse

Rate Limit Exceeded - Too many requests

500ErrorResponse

Internal Server Error - Calculation failed

▶

comparative

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%.

API key or signed-in accountStatus: live

Parameters

formatquery

No description provided.

Example: json

Functional Request Payload

{
  "method": "davidson",
  "subjects": [
    {
      "birth_datetime": {
        "iso": "1990-06-15T14:30:00"
      },
      "birth_location": {
        "latitude": {
          "decimal": 40.7128
        },
        "longitude": {
          "decimal": -74.006
        },
        "timezone": {
          "iana_name": "America/New_York"
        }
      },
      "name": "Alice"
    },
    {
      "birth_datetime": {
        "iso": "1992-02-10T09:15:00"
      },
      "birth_location": {
        "latitude": {
          "decimal": 34.0522
        },
        "longitude": {
          "decimal": -118.2437
        },
        "timezone": {
          "iana_name": "America/Los_Angeles"
        }
      },
      "name": "Bob"
    }
  ]
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/comparative/composite"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "method": "davidson",
  "subjects": [
    {
      "birth_datetime": {
        "iso": "1990-06-15T14:30:00"
      },
      "birth_location": {
        "latitude": {
          "decimal": 40.7128
        },
        "longitude": {
          "decimal": -74.006
        },
        "timezone": {
          "iana_name": "America/New_York"
        }
      },
      "name": "Alice"
    },
    {
      "birth_datetime": {
        "iso": "1992-02-10T09:15:00"
      },
      "birth_location": {
        "latitude": {
          "decimal": 34.0522
        },
        "longitude": {
          "decimal": -118.2437
        },
        "timezone": {
          "iana_name": "America/Los_Angeles"
        }
      },
      "name": "Bob"
    }
  ]
}'

Responses

200NatalChartEnhancedResponse

Successful Response

422HTTPValidationError

Validation Error

POST3 calls / requestExplorer

Calculate Composite Midpoint

/comparative/composite/midpoint

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%.

API key or signed-in accountStatus: live

Parameters

formatquery

No description provided.

Example: json

Functional Request Payload

{
  "method": "davidson",
  "subjects": [
    {
      "birth_datetime": {
        "iso": "1990-06-15T14:30:00"
      },
      "birth_location": {
        "latitude": {
          "decimal": 40.7128
        },
        "longitude": {
          "decimal": -74.006
        },
        "timezone": {
          "iana_name": "America/New_York"
        }
      },
      "name": "Alice"
    },
    {
      "birth_datetime": {
        "iso": "1992-02-10T09:15:00"
      },
      "birth_location": {
        "latitude": {
          "decimal": 34.0522
        },
        "longitude": {
          "decimal": -118.2437
        },
        "timezone": {
          "iana_name": "America/Los_Angeles"
        }
      },
      "name": "Bob"
    }
  ]
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/comparative/composite/midpoint"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "method": "davidson",
  "subjects": [
    {
      "birth_datetime": {
        "iso": "1990-06-15T14:30:00"
      },
      "birth_location": {
        "latitude": {
          "decimal": 40.7128
        },
        "longitude": {
          "decimal": -74.006
        },
        "timezone": {
          "iana_name": "America/New_York"
        }
      },
      "name": "Alice"
    },
    {
      "birth_datetime": {
        "iso": "1992-02-10T09:15:00"
      },
      "birth_location": {
        "latitude": {
          "decimal": 34.0522
        },
        "longitude": {
          "decimal": -118.2437
        },
        "timezone": {
          "iana_name": "America/Los_Angeles"
        }
      },
      "name": "Bob"
    }
  ]
}'

Responses

200NatalChartEnhancedResponse

Successful Response

422HTTPValidationError

Validation Error

POST3 calls / requestExplorer

Calculate Natal Transits

/comparative/natal-transits

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)

API key or signed-in accountStatus: live

Parameters

formatquery

No description provided.

Example: json

Functional Request Payload

{
  "subject": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "Alice"
  },
  "transit_datetime": {
    "iso": "2025-01-01T00:00:00Z"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/comparative/natal-transits"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "subject": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "Alice"
  },
  "transit_datetime": {
    "iso": "2025-01-01T00:00:00Z"
  }
}'

Responses

200NatalTransitsResponse

Successful Response

422HTTPValidationError

Validation Error

POST3 calls / requestExplorer

Calculate Overlay

/comparative/overlay

Return lightweight chart payloads for an overlay across multiple subjects (no aspects).

API key or signed-in accountStatus: live

Parameters

formatquery

No description provided.

Example: json

Functional Request Payload

{
  "subjects": [
    {
      "birth_datetime": {
        "iso": "1990-06-15T14:30:00"
      },
      "birth_location": {
        "latitude": {
          "decimal": 40.7128
        },
        "longitude": {
          "decimal": -74.006
        },
        "timezone": {
          "iana_name": "America/New_York"
        }
      },
      "name": "Alice"
    },
    {
      "birth_datetime": {
        "iso": "1992-02-10T09:15:00"
      },
      "birth_location": {
        "latitude": {
          "decimal": 34.0522
        },
        "longitude": {
          "decimal": -118.2437
        },
        "timezone": {
          "iana_name": "America/Los_Angeles"
        }
      },
      "name": "Bob"
    }
  ]
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/comparative/overlay"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "subjects": [
    {
      "birth_datetime": {
        "iso": "1990-06-15T14:30:00"
      },
      "birth_location": {
        "latitude": {
          "decimal": 40.7128
        },
        "longitude": {
          "decimal": -74.006
        },
        "timezone": {
          "iana_name": "America/New_York"
        }
      },
      "name": "Alice"
    },
    {
      "birth_datetime": {
        "iso": "1992-02-10T09:15:00"
      },
      "birth_location": {
        "latitude": {
          "decimal": 34.0522
        },
        "longitude": {
          "decimal": -118.2437
        },
        "timezone": {
          "iana_name": "America/Los_Angeles"
        }
      },
      "name": "Bob"
    }
  ]
}'

Responses

200OverlayResponse

Successful Response

422HTTPValidationError

Validation Error

POST3 calls / requestExplorer

Calculate Synastry

/comparative/synastry

Calculate a synastry chart (comparison between two subjects). 🤖 AI-optimized output available — add format=llm to reduce payload ~65%.

API key or signed-in accountStatus: live

Parameters

formatquery

No description provided.

Example: json

Functional Request Payload

{
  "subject_a": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "Alice"
  },
  "subject_b": {
    "birth_datetime": {
      "iso": "1992-02-10T09:15:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 34.0522
      },
      "longitude": {
        "decimal": -118.2437
      },
      "timezone": {
        "iana_name": "America/Los_Angeles"
      }
    },
    "name": "Bob"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/comparative/synastry"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "subject_a": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "Alice"
  },
  "subject_b": {
    "birth_datetime": {
      "iso": "1992-02-10T09:15:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 34.0522
      },
      "longitude": {
        "decimal": -118.2437
      },
      "timezone": {
        "iana_name": "America/Los_Angeles"
      }
    },
    "name": "Bob"
  }
}'

Responses

200SynastryResponse

Successful Response

422HTTPValidationError

Validation Error

▶

ACG

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "epoch": "1990-06-15T14:30:00Z",
  "natal": {
    "birthplace_lat": 34.05,
    "birthplace_lon": -118.24
  },
  "options": {
    "asteroid_groups": [
      "centaur",
      "muse"
    ]
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/acg/aspects"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "epoch": "1990-06-15T14:30:00Z",
  "natal": {
    "birthplace_lat": 34.05,
    "birthplace_lon": -118.24
  },
  "options": {
    "asteroid_groups": [
      "centaur",
      "muse"
    ]
  }
}'

Responses

200

FeatureCollection response (features is always an array; may be empty).

422HTTPValidationError

Validation Error

POST10 calls / requestPro

Cyclocartography Time-Series

/acg/ccg

Compute cyclocartography transit snapshots over a time window.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "end_epoch": "2026-12-31T00:00:00Z",
  "epoch": "1990-06-15T14:30:00Z",
  "natal": {
    "birthplace_lat": 34.05,
    "birthplace_lon": -118.24
  },
  "options": {
    "asteroid_groups": [
      "centaur",
      "muse"
    ]
  },
  "start_epoch": "2026-01-01T00:00:00Z"
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/acg/ccg"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "end_epoch": "2026-12-31T00:00:00Z",
  "epoch": "1990-06-15T14:30:00Z",
  "natal": {
    "birthplace_lat": 34.05,
    "birthplace_lon": -118.24
  },
  "options": {
    "asteroid_groups": [
      "centaur",
      "muse"
    ]
  },
  "start_epoch": "2026-01-01T00:00:00Z"
}'

Responses

200

Successful Response

422HTTPValidationError

Validation Error

POST10 calls / requestScale

Transit Parans

/acg/ccg/parans

Computes on-demand transit parans at a single epoch.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "subject": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "John Doe"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/acg/ccg/parans"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "subject": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "John Doe"
  }
}'

Responses

200

FeatureCollection response

422HTTPValidationError

Validation Error

POST10 calls / requestScale

ACG Line Crossing Points

/acg/crossings

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "epoch": "1990-06-15T14:30:00Z",
  "natal": {
    "birthplace_lat": 34.05,
    "birthplace_lon": -118.24
  },
  "options": {
    "asteroid_groups": [
      "centaur",
      "muse"
    ]
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/acg/crossings"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "epoch": "1990-06-15T14:30:00Z",
  "natal": {
    "birthplace_lat": 34.05,
    "birthplace_lon": -118.24
  },
  "options": {
    "asteroid_groups": [
      "centaur",
      "muse"
    ]
  }
}'

Responses

200

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "epoch": "1990-06-15T14:30:00Z",
  "natal": {
    "birthplace_lat": 34.05,
    "birthplace_lon": -118.24
  },
  "options": {
    "asteroid_groups": [
      "centaur",
      "muse"
    ]
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/acg/declination-lines"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "epoch": "1990-06-15T14:30:00Z",
  "natal": {
    "birthplace_lat": 34.05,
    "birthplace_lon": -118.24
  },
  "options": {
    "asteroid_groups": [
      "centaur",
      "muse"
    ]
  }
}'

Responses

200

Successful Response

422HTTPValidationError

Validation Error

POST10 calls / requestScale

Hermetic Lines

/acg/hermetic-lines

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "epoch": "1990-06-15T14:30:00Z",
  "natal": {
    "birthplace_lat": 34.05,
    "birthplace_lon": -118.24
  },
  "options": {
    "asteroid_groups": [
      "centaur",
      "muse"
    ]
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/acg/hermetic-lines"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "epoch": "1990-06-15T14:30:00Z",
  "natal": {
    "birthplace_lat": 34.05,
    "birthplace_lon": -118.24
  },
  "options": {
    "asteroid_groups": [
      "centaur",
      "muse"
    ]
  }
}'

Responses

200

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

API key or signed-in accountStatus: live

Functional Request Payload

{
  "epoch": "1990-06-15T14:30:00Z",
  "natal": {
    "birthplace_lat": 34.05,
    "birthplace_lon": -118.24
  },
  "options": {
    "asteroid_groups": [
      "centaur",
      "muse"
    ]
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/acg/hits"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "epoch": "1990-06-15T14:30:00Z",
  "natal": {
    "birthplace_lat": 34.05,
    "birthplace_lon": -118.24
  },
  "options": {
    "asteroid_groups": [
      "centaur",
      "muse"
    ]
  }
}'

Responses

200

Successful Response

422HTTPValidationError

Validation Error

POST10 calls / requestPro

Local Space Azimuth Lines

/acg/local-space

Compute local space azimuth/altitude lines from observer location.

API key or signed-in accountStatus: beta

Functional Request Payload

{
  "epoch": "1990-06-15T14:30:00Z",
  "natal": {
    "birthplace_lat": 34.05,
    "birthplace_lon": -118.24
  },
  "options": {
    "asteroid_groups": [
      "centaur",
      "muse"
    ]
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/acg/local-space"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "epoch": "1990-06-15T14:30:00Z",
  "natal": {
    "birthplace_lat": 34.05,
    "birthplace_lon": -118.24
  },
  "options": {
    "asteroid_groups": [
      "centaur",
      "muse"
    ]
  }
}'

Responses

200

Successful Response

422HTTPValidationError

Validation Error

GETFreeExplorer

ACG Engine Metadata

/acg/meta

ACG engine version, capabilities, and status.

API key or signed-in accountStatus: live

Copy-Paste Starter

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "configuration": {
    "coordinate_system": "geocentric",
    "house_system": "P",
    "object_set": "modern_plus_chiron",
    "zodiac_type": "tropical"
  },
  "options": {
    "include_aspects": true
  },
  "subject": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "John Doe"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/acg/midpoints"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "configuration": {
    "coordinate_system": "geocentric",
    "house_system": "P",
    "object_set": "modern_plus_chiron",
    "zodiac_type": "tropical"
  },
  "options": {
    "include_aspects": true
  },
  "subject": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "John Doe"
  }
}'

Responses

200

Successful Response

422HTTPValidationError

Validation Error

POST10 calls / requestScale

Natal Parans

/acg/parans

Computes exact angular simultaneity events between N planetary bodies for a single chart.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "subject": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "John Doe"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/acg/parans"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "subject": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "John Doe"
  }
}'

Responses

200

FeatureCollection response

422HTTPValidationError

Validation Error

POST10 calls / requestPro

Calculate Astrocartography Power Lines

/acg/power-lines

Calculate strictly isolated ACG power lines (MC, IC, AC, DC). Options configurations to include aspects/midpoints will be explicitly stripped.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "epoch": "1990-06-15T14:30:00Z",
  "natal": {
    "birthplace_lat": 34.05,
    "birthplace_lon": -118.24
  },
  "options": {
    "asteroid_groups": [
      "centaur",
      "muse"
    ]
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/acg/power-lines"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "epoch": "1990-06-15T14:30:00Z",
  "natal": {
    "birthplace_lat": 34.05,
    "birthplace_lon": -118.24
  },
  "options": {
    "asteroid_groups": [
      "centaur",
      "muse"
    ]
  }
}'

Responses

200

FeatureCollection response (features is always an array; may be empty).

422HTTPValidationError

Validation Error

POST20 calls / requestScale

Relational Parans

/acg/relational-parans

Computes exact cross-chart angular simultaneity events between NxM planetary bodies for two charts.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "subject1": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "John Doe"
  },
  "subject2": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "John Doe"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/acg/relational-parans"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "subject1": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "John Doe"
  },
  "subject2": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "John Doe"
  }
}'

Responses

200

FeatureCollection response

422HTTPValidationError

Validation Error

▶

visualization

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.

Example: false

Functional Request Payload

{
  "subject_a": {
    "birth_datetime": {
      "iso": "2023-12-07T15:30:00Z"
    },
    "birth_location": {
      "city": "New York",
      "country": "USA",
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "houses": {},
    "name": "string",
    "positions": [
      {}
    ]
  },
  "subject_b": {
    "birth_datetime": {
      "iso": "2023-12-07T15:30:00Z"
    },
    "birth_location": {
      "city": "New York",
      "country": "USA",
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "houses": {},
    "name": "string",
    "positions": [
      {}
    ]
  },
  "configuration": {
    "coordinate_system": "geocentric",
    "house_system": "P",
    "object_set": "modern_plus_chiron",
    "zodiac_type": "tropical"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/visualization/bi-wheel"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "subject_a": {
    "birth_datetime": {
      "iso": "2023-12-07T15:30:00Z"
    },
    "birth_location": {
      "city": "New York",
      "country": "USA",
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "houses": {},
    "name": "string",
    "positions": [
      {}
    ]
  },
  "subject_b": {
    "birth_datetime": {
      "iso": "2023-12-07T15:30:00Z"
    },
    "birth_location": {
      "city": "New York",
      "country": "USA",
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "houses": {},
    "name": "string",
    "positions": [
      {}
    ]
  },
  "configuration": {
    "coordinate_system": "geocentric",
    "house_system": "P",
    "object_set": "modern_plus_chiron",
    "zodiac_type": "tropical"
  }
}'

Responses

200

Successful Response

403

Forbidden (tier upgrade required)

422HTTPValidationError

Validation Error

POST2 calls / requestExplorer

Human Design Bodygraph

/visualization/bodygraph

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.

Example: placidus

Functional Request Payload

{
  "birth_datetime_local": "1985-03-20T08:15:00",
  "latitude": 37.7749,
  "longitude": -122.4194,
  "timezone": {
    "iana_name": "America/Los_Angeles"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/visualization/bodygraph"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "birth_datetime_local": "1985-03-20T08:15:00",
  "latitude": 37.7749,
  "longitude": -122.4194,
  "timezone": {
    "iana_name": "America/Los_Angeles"
  }
}'

Responses

200

Successful Response

403

Forbidden (tier upgrade required)

422HTTPValidationError

Validation Error

POST2 calls / requestExplorer

Generate Chart Wheel

/visualization/chart-wheel

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.

Example: false

Functional Request Payload

{
  "subject": {
    "birth_datetime": {
      "iso": "1985-03-20T08:15:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 37.7749
      },
      "longitude": {
        "decimal": -122.4194
      },
      "timezone": {
        "iana_name": "America/Los_Angeles"
      }
    },
    "name": "Jane Smith"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/visualization/chart-wheel"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "subject": {
    "birth_datetime": {
      "iso": "1985-03-20T08:15:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 37.7749
      },
      "longitude": {
        "decimal": -122.4194
      },
      "timezone": {
        "iana_name": "America/Los_Angeles"
      }
    },
    "name": "Jane Smith"
  }
}'

Responses

200

Successful Response

403

Forbidden (tier upgrade required)

422HTTPValidationError

Validation Error

▶

eclipse

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "birth_datetime_local": "1985-03-20T08:15:00",
  "latitude": 37.7749,
  "longitude": -122.4194,
  "timezone": {
    "iana_name": "America/Los_Angeles"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/human-design/chart"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "birth_datetime_local": "1985-03-20T08:15:00",
  "latitude": 37.7749,
  "longitude": -122.4194,
  "timezone": {
    "iana_name": "America/Los_Angeles"
  }
}'

Responses

200HumanDesignResponse

Successful Response

422HTTPValidationError

Validation Error

POST3 calls / requestExplorer

Human Design Composite

/human-design/composite

Generate a Composite / Relationship Chart. Analyzes Electromagnetic connection scoring between two charts. Pricing: 3 credits (+2 with include_visual). Available on every plan.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "subject_1": {
    "birth_datetime_local": "1985-03-20T08:15:00",
    "latitude": 37.7749,
    "longitude": -122.4194,
    "timezone": {
      "iana_name": "America/Los_Angeles"
    }
  },
  "subject_2": {
    "birth_datetime_local": "1985-03-20T08:15:00",
    "latitude": 37.7749,
    "longitude": -122.4194,
    "timezone": {
      "iana_name": "America/Los_Angeles"
    }
  },
  "format": "json",
  "include_visual": false,
  "visual_config": {
    "format": "svg",
    "layout": "graph",
    "size": 800,
    "theme": "light"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/human-design/composite"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "subject_1": {
    "birth_datetime_local": "1985-03-20T08:15:00",
    "latitude": 37.7749,
    "longitude": -122.4194,
    "timezone": {
      "iana_name": "America/Los_Angeles"
    }
  },
  "subject_2": {
    "birth_datetime_local": "1985-03-20T08:15:00",
    "latitude": 37.7749,
    "longitude": -122.4194,
    "timezone": {
      "iana_name": "America/Los_Angeles"
    }
  },
  "format": "json",
  "include_visual": false,
  "visual_config": {
    "format": "svg",
    "layout": "graph",
    "size": 800,
    "theme": "light"
  }
}'

Responses

200HumanDesignCompositeResponse

Successful Response

422HTTPValidationError

Validation Error

POST6 calls / requestExplorer

Human Design Connection Matrix

/human-design/connection-matrix

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "subjects": [
    {
      "birth_data": {
        "birth_datetime_local": "1985-03-20T08:15:00",
        "latitude": 37.7749,
        "longitude": -122.4194,
        "timezone": {
          "iana_name": "America/Los_Angeles"
        }
      },
      "id": "string",
      "name": "string"
    }
  ],
  "detail": "channels",
  "format": "json"
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/human-design/connection-matrix"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "subjects": [
    {
      "birth_data": {
        "birth_datetime_local": "1985-03-20T08:15:00",
        "latitude": 37.7749,
        "longitude": -122.4194,
        "timezone": {
          "iana_name": "America/Los_Angeles"
        }
      },
      "id": "string",
      "name": "string"
    }
  ],
  "detail": "channels",
  "format": "json"
}'

Responses

200HDConnectionMatrixResponse

Successful Response

422HTTPValidationError

Validation Error

POST2 calls / requestExplorer

Planetary Opposition Chart

/human-design/cycles/opposition

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).

API key or signed-in accountStatus: live

Functional Request Payload

{
  "planet": "sun",
  "birth_datetime_local": "1961-10-09T17:56:00",
  "birth_datetime_utc": "2025-01-01T00:00:00Z",
  "format": "json",
  "include_chiron": false,
  "include_lilith": false,
  "include_visual": false
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/human-design/cycles/opposition"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "planet": "sun",
  "birth_datetime_local": "1961-10-09T17:56:00",
  "birth_datetime_utc": "2025-01-01T00:00:00Z",
  "format": "json",
  "include_chiron": false,
  "include_lilith": false,
  "include_visual": false
}'

Responses

200HumanDesignResponse

Successful Response

422HTTPValidationError

Validation Error

POST2 calls / requestExplorer

Planetary Return Chart

/human-design/cycles/return

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "planet": "sun",
  "birth_datetime_local": "1961-10-09T17:56:00",
  "birth_datetime_utc": "2025-01-01T00:00:00Z",
  "format": "json",
  "include_chiron": false,
  "include_lilith": false,
  "include_visual": false
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/human-design/cycles/return"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "planet": "sun",
  "birth_datetime_local": "1961-10-09T17:56:00",
  "birth_datetime_utc": "2025-01-01T00:00:00Z",
  "format": "json",
  "include_chiron": false,
  "include_lilith": false,
  "include_visual": false
}'

Responses

200HumanDesignResponse

Successful Response

422HTTPValidationError

Validation Error

POST2 calls / requestExplorer

Solar Return Chart

/human-design/cycles/solar-return

Calculate a Solar Return Chart for a specific year. Determines exact moment Sun returns to natal degree, then runs a full chart.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "return_year": 1,
  "birth_datetime_local": "1961-10-09T17:56:00",
  "birth_datetime_utc": "2025-01-01T00:00:00Z",
  "format": "json",
  "include_visual": false,
  "latitude": -90,
  "longitude": -180
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/human-design/cycles/solar-return"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "return_year": 1,
  "birth_datetime_local": "1961-10-09T17:56:00",
  "birth_datetime_utc": "2025-01-01T00:00:00Z",
  "format": "json",
  "include_visual": false,
  "latitude": -90,
  "longitude": -180
}'

Responses

200HumanDesignResponse

Successful Response

422HTTPValidationError

Validation Error

POST1 call / requestExplorer

Human Design Extended Placements

/human-design/extended

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "birth_datetime_local": "1985-03-20T08:15:00",
  "include": [
    "bodies",
    "angles",
    "lots",
    "stars"
  ],
  "latitude": 37.7749,
  "longitude": -122.4194,
  "star_groups": [
    "royal_stars"
  ],
  "timezone": {
    "iana_name": "America/Los_Angeles"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/human-design/extended"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "birth_datetime_local": "1985-03-20T08:15:00",
  "include": [
    "bodies",
    "angles",
    "lots",
    "stars"
  ],
  "latitude": 37.7749,
  "longitude": -122.4194,
  "star_groups": [
    "royal_stars"
  ],
  "timezone": {
    "iana_name": "America/Los_Angeles"
  }
}'

Responses

200HumanDesignExtendedResponse

Successful Response

422HTTPValidationError

Validation Error

POST6 calls / requestExplorer

Human Design Penta

/human-design/penta

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "group_name": "string",
  "members": [
    {
      "birth_data": {
        "birth_datetime_local": "1985-03-20T08:15:00",
        "latitude": 37.7749,
        "longitude": -122.4194,
        "timezone": {
          "iana_name": "America/Los_Angeles"
        }
      },
      "id": "string",
      "name": "string"
    }
  ],
  "format": "json",
  "settings": {}
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/human-design/penta"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "group_name": "string",
  "members": [
    {
      "birth_data": {
        "birth_datetime_local": "1985-03-20T08:15:00",
        "latitude": 37.7749,
        "longitude": -122.4194,
        "timezone": {
          "iana_name": "America/Los_Angeles"
        }
      },
      "id": "string",
      "name": "string"
    }
  ],
  "format": "json",
  "settings": {}
}'

Responses

200PentaResponse

Successful Response

422HTTPValidationError

Validation Error

POST2 calls / requestExplorer

Human Design Transit

/human-design/transit

Get current Human Design planetary transit field (Neutrino Weather). Returns only personality activations (no design/type calculation).

API key or signed-in accountStatus: live

Functional Request Payload

{
  "datetime_utc": "2025-01-01T00:00:00Z",
  "format": "json",
  "include_visual": false,
  "visual_config": {
    "format": "svg",
    "layout": "graph",
    "size": 800,
    "theme": "light"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/human-design/transit"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "datetime_utc": "2025-01-01T00:00:00Z",
  "format": "json",
  "include_visual": false,
  "visual_config": {
    "format": "svg",
    "layout": "graph",
    "size": 800,
    "theme": "light"
  }
}'

Responses

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).

API key or signed-in accountStatus: live

Functional Request Payload

{
  "subject": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "Alice"
  },
  "transit_datetime": {
    "iso": "2025-01-01T00:00:00Z"
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/human-design/transit-chart"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "subject": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "Alice"
  },
  "transit_datetime": {
    "iso": "2025-01-01T00:00:00Z"
  }
}'

Responses

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "bodies": [
    "Sun",
    "Mars",
    "Jupiter",
    "Saturn",
    "Pluto"
  ],
  "end_date": "2027-01-01T00:00:00Z",
  "natal_gates": [
    30,
    57,
    20,
    34,
    10
  ],
  "start_date": "2026-10-01T00:00:00Z"
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/human-design/transit-timeline"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "bodies": [
    "Sun",
    "Mars",
    "Jupiter",
    "Saturn",
    "Pluto"
  ],
  "end_date": "2027-01-01T00:00:00Z",
  "natal_gates": [
    30,
    57,
    20,
    34,
    10
  ],
  "start_date": "2026-10-01T00:00:00Z"
}'

Responses

200HDTransitTimelineResponse

Successful Response

422HTTPValidationError

Validation Error

▶

chinese

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).

Example: json

Functional Request Payload

{
  "day": 15,
  "month": 1,
  "year": 1990,
  "day_boundary": "zi_hour",
  "format": "json",
  "hour": 8,
  "latitude": 31.2304
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/chinese/bazi"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "day": 15,
  "month": 1,
  "year": 1990,
  "day_boundary": "zi_hour",
  "format": "json",
  "hour": 8,
  "latitude": 31.2304
}'

Responses

200BaZiResponse

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "year": 1,
  "day": 1,
  "hour": 12,
  "month": 1,
  "year_boundary": "lichun"
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/chinese/bazi/annual-pillar"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "year": 1,
  "day": 1,
  "hour": 12,
  "month": 1,
  "year_boundary": "lichun"
}'

Responses

200BaZiAnnualPillarResponse

Annual pillar stem, branch, and NaYin.

422

Validation error.

POST3 calls / requestExplorer

Render BaZi Chart (SVG/PNG)

/chinese/bazi/chart

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "datetime": "string",
  "day": 1,
  "day_boundary": "zi_hour",
  "format": "json",
  "hour": 1,
  "latitude": 31.2304,
  "longitude": 121.4737
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/chinese/bazi/chart"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "datetime": "string",
  "day": 1,
  "day_boundary": "zi_hour",
  "format": "json",
  "hour": 1,
  "latitude": 31.2304,
  "longitude": 121.4737
}'

Responses

200

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "chart_a": {
    "day": 15,
    "month": 1,
    "year": 1990,
    "day_boundary": "zi_hour",
    "format": "json",
    "hour": 8,
    "latitude": 31.2304
  },
  "chart_b": {
    "day": 15,
    "month": 1,
    "year": 1990,
    "day_boundary": "zi_hour",
    "format": "json",
    "hour": 8,
    "latitude": 31.2304
  }
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/chinese/bazi/compatibility"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "chart_a": {
    "day": 15,
    "month": 1,
    "year": 1990,
    "day_boundary": "zi_hour",
    "format": "json",
    "hour": 8,
    "latitude": 31.2304
  },
  "chart_b": {
    "day": 15,
    "month": 1,
    "year": 1990,
    "day_boundary": "zi_hour",
    "format": "json",
    "hour": 8,
    "latitude": 31.2304
  }
}'

Responses

200BaZiCompatibilityResponse

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "day": 15,
  "month": 1,
  "year": 1990,
  "day_boundary": "zi_hour",
  "format": "json",
  "hour": 8,
  "latitude": 31.2304
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/chinese/bazi/element-balance"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "day": 15,
  "month": 1,
  "year": 1990,
  "day_boundary": "zi_hour",
  "format": "json",
  "hour": 8,
  "latitude": 31.2304
}'

Responses

200BaZiElementBalanceResponse

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "gender": "male",
  "datetime": "2025-01-01T00:00:00Z",
  "day": 1,
  "day_boundary": "zi_hour",
  "format": "json",
  "hour": 12,
  "latitude": -90
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/chinese/bazi/luck-pillars"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "gender": "male",
  "datetime": "2025-01-01T00:00:00Z",
  "day": 1,
  "day_boundary": "zi_hour",
  "format": "json",
  "hour": 12,
  "latitude": -90
}'

Responses

200BaZiLuckPillarsResponse

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "year": 1800
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/chinese/bazi/solar-terms"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "year": 1800
}'

Responses

200BaZiSolarTermsResponse

All 24 solar terms for the requested year.

422

Validation error.

POST3 calls / requestExplorer

BaZi Ten Gods Analysis

/chinese/bazi/ten-gods

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "day": 15,
  "month": 1,
  "year": 1990,
  "day_boundary": "zi_hour",
  "format": "json",
  "hour": 8,
  "latitude": 31.2304
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/chinese/bazi/ten-gods"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "day": 15,
  "month": 1,
  "year": 1990,
  "day_boundary": "zi_hour",
  "format": "json",
  "hour": 8,
  "latitude": 31.2304
}'

Responses

200BaZiTenGodsResponse

Ten Gods for all four pillars.

422

Validation error.

POST3 calls / requestExplorer

Chinese Calendar Month Almanac

/chinese/calendar/almanac

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).

API key or signed-in accountStatus: live

Functional Request Payload

{
  "month": 12,
  "year": 2033
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/chinese/calendar/almanac"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "month": 12,
  "year": 2033
}'

Responses

200ChineseCalendarAlmanacResponse

Successful Response

422HTTPValidationError

Validation Error

POST1 call / requestExplorer

Chinese Calendar Converter

/chinese/calendar/convert

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "date": "2025-01-29"
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/chinese/calendar/convert"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "date": "2025-01-29"
}'

Responses

200ChineseCalendarConvertResponse

Successful Response

422HTTPValidationError

Validation Error

POST2 calls / requestExplorer

Zi Wei Dou Shu Chart

/chinese/ziwei

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "day": 16,
  "gender": "female",
  "hour": 4,
  "minute": 0,
  "month": 8,
  "year": 2000
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/chinese/ziwei"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "day": 16,
  "gender": "female",
  "hour": 4,
  "minute": 0,
  "month": 8,
  "year": 2000
}'

Responses

200ZiWeiResponse

Successful Response

422HTTPValidationError

Validation Error

GET1 call / requestExplorer

Chinese zodiac animal and element for a year

/chinese/zodiac

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).

Example: json

Functional Request Payload

{
  "latitude": 28.6139,
  "longitude": 77.209,
  "ashtakavarga_rules": "raman",
  "ayanamsa": "lahiri",
  "dasha": {
    "as_of_utc": "string",
    "chara_method": "kn_rao",
    "chara_second_cycle": "repeat",
    "depth": 2,
    "karaka_scheme": 7,
    "system": "vimshottari",
    "year_basis": "julian"
  },
  "datetime_local": "1961-10-09T17:56:00",
  "datetime_utc": "1990-01-15T08:30:00"
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/vedic/chart"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "latitude": 28.6139,
  "longitude": 77.209,
  "ashtakavarga_rules": "raman",
  "ayanamsa": "lahiri",
  "dasha": {
    "as_of_utc": "string",
    "chara_method": "kn_rao",
    "chara_second_cycle": "repeat",
    "depth": 2,
    "karaka_scheme": 7,
    "system": "vimshottari",
    "year_basis": "julian"
  },
  "datetime_local": "1961-10-09T17:56:00",
  "datetime_utc": "1990-01-15T08:30:00"
}'

Responses

200VedicChartResponse

Vedic chart with sidereal positions, nakshatras, and navamsa.

422

Validation error (bad datetime, unsupported ayanamsa, etc.)

POST1 call / requestExplorer

Vedic KP Chart

/vedic/kp

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "datetime_local": "1973-11-17T10:00:00",
  "latitude": 21.1667,
  "longitude": 75.6833,
  "timezone": "Asia/Kolkata"
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/vedic/kp"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "datetime_local": "1973-11-17T10:00:00",
  "latitude": 21.1667,
  "longitude": 75.6833,
  "timezone": "Asia/Kolkata"
}'

Responses

200VedicKPResponse

Successful Response

422HTTPValidationError

Validation Error

POST2 calls / requestExplorer

Vedic Ashtakoota Matching

/vedic/matching

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "boy": {
    "datetime_local": "string",
    "datetime_utc": "string",
    "latitude": -90,
    "longitude": -180,
    "timezone": {
      "iana_name": "America/New_York"
    }
  },
  "girl": {
    "datetime_local": "string",
    "datetime_utc": "string",
    "latitude": -90,
    "longitude": -180,
    "timezone": {
      "iana_name": "America/New_York"
    }
  },
  "ayanamsa": "lahiri",
  "format": "json"
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/vedic/matching"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "boy": {
    "datetime_local": "string",
    "datetime_utc": "string",
    "latitude": -90,
    "longitude": -180,
    "timezone": {
      "iana_name": "America/New_York"
    }
  },
  "girl": {
    "datetime_local": "string",
    "datetime_utc": "string",
    "latitude": -90,
    "longitude": -180,
    "timezone": {
      "iana_name": "America/New_York"
    }
  },
  "ayanamsa": "lahiri",
  "format": "json"
}'

Responses

200VedicMatchingResponse

Successful Response

422HTTPValidationError

Validation Error

POST1 call / requestExplorer

Vedic Panchang

/vedic/panchang

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "date": "2026-10-23",
  "latitude": 28.6139,
  "longitude": 77.209,
  "timezone": "Asia/Kolkata"
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/vedic/panchang"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "date": "2026-10-23",
  "latitude": 28.6139,
  "longitude": 77.209,
  "timezone": "Asia/Kolkata"
}'

Responses

200VedicPanchangResponse

Successful Response

422HTTPValidationError

Validation Error

POST5 calls / requestExplorer

Vedic Varshaphal (Tajika Annual Chart)

/vedic/varshaphal

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).

API key or signed-in accountStatus: live

Functional Request Payload

{
  "datetime_local": "1985-08-20T07:30:00",
  "latitude": 28.6139,
  "longitude": 77.209,
  "timezone": "Asia/Kolkata",
  "year": 2026
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/vedic/varshaphal"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "datetime_local": "1985-08-20T07:30:00",
  "latitude": 28.6139,
  "longitude": 77.209,
  "timezone": "Asia/Kolkata",
  "year": 2026
}'

Responses

200VedicVarshaphalResponse

Successful Response

422HTTPValidationError

Validation Error

▶

agricultural

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%.

API key or signed-in accountStatus: live

Parameters

formatquery

Response format: json | llm.

Example: string

Functional Request Payload

{
  "subject": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "John Doe"
  },
  "beams_orb": 17,
  "combust_orb": 8.5,
  "exact_threshold": 0.0166
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/venus-star-points"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "subject": {
    "birth_datetime": {
      "iso": "1990-06-15T14:30:00"
    },
    "birth_location": {
      "latitude": {
        "decimal": 40.7128
      },
      "longitude": {
        "decimal": -74.006
      },
      "timezone": {
        "iana_name": "America/New_York"
      }
    },
    "name": "John Doe"
  },
  "beams_orb": 17,
  "combust_orb": 8.5,
  "exact_threshold": 0.0166
}'

Responses

200VenusStarPointsResponse

Venus Star Points calculated successfully

400ErrorResponse

Invalid input validation

422

Unprocessable Entity - Invalid input format

500ErrorResponse

Calculation failed

POST1 call / requestExplorer

Range-based Venus conjunctions

/ephemeris/venus-star-points/conjunctions

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%.

API key or signed-in accountStatus: live

Parameters

formatquery

Response format: json | llm.

Example: string

Functional Request Payload

{
  "end_date": "string",
  "start_date": "string",
  "beams_orb": 17,
  "combust_orb": 8.5
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/venus-star-points/conjunctions"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "end_date": "string",
  "start_date": "string",
  "beams_orb": 17,
  "combust_orb": 8.5
}'

Responses

200VenusConjunctionsResponse

Successful Response

400

Bad Request - Input validation failed

422

Unprocessable Entity - Invalid input format

500

Internal Server Error - Calculation failed

POST1 call / requestExplorer

Venus 8-year star pattern

/ephemeris/venus-star-points/eight-year-star

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%.

API key or signed-in accountStatus: live

Parameters

formatquery

Response format: json | llm.

Example: string

Functional Request Payload

{
  "date": "string"
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/venus-star-points/eight-year-star"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "date": "string"
}'

Responses

200VenusEightYearStarResponse

Successful Response

400

Bad Request - Input validation failed

422

Unprocessable Entity - Invalid input format

500

Internal Server Error - Calculation failed

POST1 call / requestExplorer

Venus greatest elongations

/ephemeris/venus-star-points/elongations

Find all Venus greatest elongations in a date range. 🤖 AI-optimized output available — add format=llm to reduce payload ~60%.

API key or signed-in accountStatus: live

Parameters

formatquery

Response format: json | llm.

Example: string

Functional Request Payload

{
  "end_date": "string",
  "start_date": "string",
  "beams_orb": 17,
  "combust_orb": 8.5
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/venus-star-points/elongations"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "end_date": "string",
  "start_date": "string",
  "beams_orb": 17,
  "combust_orb": 8.5
}'

Responses

200VenusElongationsResponse

Successful Response

400

Bad Request - Input validation failed

422

Unprocessable Entity - Invalid input format

500

Internal Server Error - Calculation failed

POST1 call / requestExplorer

Venus phase and visibility

/ephemeris/venus-star-points/phase

Compute current visibility and cycle phase for Venus. 🤖 AI-optimized output available — add format=llm to reduce payload ~60%.

API key or signed-in accountStatus: live

Parameters

formatquery

Response format: json | llm.

Example: string

Functional Request Payload

{
  "date": "string"
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/venus-star-points/phase"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "date": "string"
}'

Responses

200VenusPhaseResponse

Successful Response

400

Bad Request - Input validation failed

422

Unprocessable Entity - Invalid input format

500

Internal Server Error - Calculation failed

POST1 call / requestExplorer

Venus station points

/ephemeris/venus-star-points/stations

Find all Venus stationary points (Retrograde/Direct) in range. 🤖 AI-optimized output available — add format=llm to reduce payload ~60%.

API key or signed-in accountStatus: live

Parameters

formatquery

Response format: json | llm.

Example: string

Functional Request Payload

{
  "end_date": "string",
  "start_date": "string",
  "beams_orb": 17,
  "combust_orb": 8.5
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/ephemeris/venus-star-points/stations"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "end_date": "string",
  "start_date": "string",
  "beams_orb": 17,
  "combust_orb": 8.5
}'

Responses

200VenusStationsResponse

Successful Response

400

Bad Request - Input validation failed

422

Unprocessable Entity - Invalid input format

500

Internal Server Error - Calculation failed

▶

calendar

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"

Responses

200MoonAspectsResponse

Successful Response

400ErrorResponse

Bad Request

422

Unprocessable Entity - Invalid input format

500ErrorResponse

Internal Server Error

Example Success Response

{
  "applying": [
    {
      "applying": true,
      "aspect_type": "square",
      "orb": 2.3,
      "planet": "Sun"
    }
  ],
  "aspects": [
    {
      "applying": true,
      "aspect_type": "square",
      "orb": 2.3,
      "planet": "Sun"
    }
  ],
  "count": 1,
  "metadata": {
    "calculation_time_ms": 18.5
  },
  "separating": [],
  "success": true
}
GET1 call / requestExplorer

Get Moon sign ingresses for date range

/ephemeris/moon/ingresses

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"

Responses

200MoonIngressesResponse

Successful Response

400ErrorResponse

Bad Request

422

Unprocessable Entity - Invalid input format

500ErrorResponse

Internal Server Error

Example Success Response

{
  "count": 13,
  "ingresses": [
    {
      "from_sign": "Aries",
      "time": "2025-12-01T08:15:00+00:00",
      "to_sign": "Taurus"
    },
    {
      "from_sign": "Taurus",
      "time": "2025-12-03T18:30:00+00:00",
      "to_sign": "Gemini"
    }
  ],
  "metadata": {
    "average_ingresses_per_month": 13,
    "cache_hit": true,
    "calculation_time_ms": 2.1,
    "end_date": "2025-12-31T23:59:59+00:00",
    "start_date": "2025-12-01T00:00:00+00:00",
    "zodiac_mode": "tropical"
  },
  "success": true
}
GET1 call / requestExplorer

Get lunar phase

/ephemeris/moon/phase

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"

Responses

200LunarPhaseResponse

Successful Response

400ErrorResponse

Bad Request

422

Unprocessable Entity - Invalid input format

500ErrorResponse

Internal Server Error

Example Success Response

{
  "days_to_full": 2.5,
  "days_to_new": 12.3,
  "illumination": 78.5,
  "metadata": {
    "calculation_time_ms": 5.2
  },
  "moon_degree": 14.2,
  "moon_longitude": 284.2,
  "moon_sign": "Capricorn",
  "phase_angle": 125.3,
  "phase_name": "Waxing Gibbous",
  "success": true,
  "waxing": true
}
GET1 call / requestExplorer

Get Void of Course Moon status

/ephemeris/moon/void-of-course

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"

Responses

200VoidOfCourseResponse

Successful Response

400ErrorResponse

Bad Request

422

Unprocessable Entity - Invalid input format

500ErrorResponse

Internal Server Error

Example Success Response

{
  "current_sign": "Gemini",
  "is_void": true,
  "last_aspect": {
    "aspect_type": "sextile",
    "planet": "Venus",
    "time": "2025-12-11T14:32:00+00:00"
  },
  "metadata": {
    "cache_hit": false,
    "calculation_time_ms": 25.3
  },
  "next_sign": "Cancer",
  "success": true,
  "void_end": "2025-12-11T18:45:00+00:00",
  "void_start": "2025-12-11T14:32:00+00:00"
}
▶

location-timezone

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"

Responses

200LocationAutocompleteResponse

Successful Response

400

Bad Request - Invalid parameters

422HTTPValidationError

Validation Error

503

Service Unavailable - Geocoding provider down

Example Success Response

{
  "cached": false,
  "query": "san fran",
  "suggestions": [
    {
      "confidence": 0.97,
      "country_code": "US",
      "display_name": "San Francisco, California, United States",
      "latitude": 37.7749,
      "longitude": -122.4194,
      "place_id": "place.12345",
      "short_name": "San Francisco",
      "timezone": "America/Los_Angeles"
    }
  ],
  "total_results": 1
}
GET1 call / requestExplorer

Reverse geocode coordinates to location name

/location/reverse

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "latitude": 37.7749,
  "longitude": -122.4194
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/timezone/lookup"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "latitude": 37.7749,
  "longitude": -122.4194
}'

Responses

200TimezoneLookupResponse

Successful Response

400

Bad Request - Input validation failed

422

Unprocessable Entity - Invalid input format

500

Internal Server Error

POST1 call / requestExplorer

Get UTC offset at datetime for coordinates

/timezone/offset

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

API key or signed-in accountStatus: live

Functional Request Payload

{
  "datetime_utc": "2025-07-01T12:00:00Z",
  "lat": 37.7749,
  "lon": -122.4194
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/timezone/offset"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "datetime_utc": "2025-07-01T12:00:00Z",
  "lat": 37.7749,
  "lon": -122.4194
}'

Responses

200TimezoneOffsetResponse

Successful Response

400

Bad Request - Input validation failed

422

Unprocessable Entity - Invalid input format

500

Internal Server Error

▶

catalogs

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.

API key or signed-in accountStatus: live

Functional Request Payload

{
  "day": 1,
  "month": 1,
  "year": 1,
  "calendar": "proleptic_gregorian",
  "hour": 0,
  "minute": 0,
  "second": 0
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/time/julian-day"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "day": 1,
  "month": 1,
  "year": 1,
  "calendar": "proleptic_gregorian",
  "hour": 0,
  "minute": 0,
  "second": 0
}'

Responses

200JulianDayResponse

Successful Response

400ErrorResponse

Bad Request

422HTTPValidationError

Validation Error

500ErrorResponse

Internal Server Error

POST1 call / requestExplorer

Time Scale Conversions

/time/scales

Convert between major astronomical time scales (UTC, TT, TAI, TDB, UT1).

API key or signed-in accountStatus: live

Functional Request Payload

{
  "julian_day": 1,
  "from_scale": "utc",
  "latitude": 1,
  "longitude": 1
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/time/scales"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "julian_day": 1,
  "from_scale": "utc",
  "latitude": 1,
  "longitude": 1
}'

Responses

200TimeScalesResponse

Successful Response

400ErrorResponse

Bad Request

422HTTPValidationError

Validation Error

500ErrorResponse

Internal Server Error

GET1 call / requestExplorer

Sidereal Time (LAST & GMST)

/time/sidereal

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).

API key or signed-in accountStatus: live

Parameters

formatquery

Output format: json (default) or llm.

Example: string

Functional Request Payload

{
  "end": "string",
  "natal": {
    "configuration": {
      "coordinate_system": "geocentric",
      "house_system": "P",
      "object_set": "modern_plus_chiron",
      "zodiac_type": "tropical"
    },
    "options": {
      "include_aspects": true
    },
    "subject": {
      "birth_datetime": {
        "iso": "1990-06-15T14:30:00"
      },
      "birth_location": {
        "latitude": {
          "decimal": 40.7128
        },
        "longitude": {
          "decimal": -74.006
        },
        "timezone": {
          "iana_name": "America/New_York"
        }
      },
      "name": "John Doe"
    }
  },
  "start": "string",
  "angles": "string",
  "bodies": "string",
  "house_system": "P",
  "max_results": 200
}

Copy-Paste Starter

curl -X POST "https://api.openephemeris.com/electional/natal-angle-crossings"
  -H "X-OpenEphemeris-API-Key: YOUR_API_KEY"
  -H "Content-Type: application/json"
  -d '{
  "end": "string",
  "natal": {
    "configuration": {
      "coordinate_system": "geocentric",
      "house_system": "P",
      "object_set": "modern_plus_chiron",
      "zodiac_type": "tropical"
    },
    "options": {
      "include_aspects": true
    },
    "subject": {
      "birth_datetime": {
        "iso": "1990-06-15T14:30:00"
      },
      "birth_location": {
        "latitude": {
          "decimal": 40.7128
        },
        "longitude": {
          "decimal": -74.006
        },
        "timezone": {
          "iana_name": "America/New_York"
        }
      },
      "name": "John Doe"
    }
  },
  "start": "string",
  "angles": "string",
  "bodies": "string",
  "house_system": "P",
  "max_results": 200
}'

Responses

200NatalAngleCrossingsResponse

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"

Responses

200ElectionalStationResponse

Station events

422HTTPValidationError

Validation Error