openephemeris-com Calendar API

Mark the turning of the wheel. Cross-quarter days, exact moon phases, and lunar standstills. **10 units per request.**

Operations 3

GET /calendar/astrology/cross-quarter Wheel of the Year — True Astronomical Dates #
GET /calendar/astrology/lunar-standstill Lunar Standstill — 18.6-Year Nodal Cycle Status #
GET /calendar/astrology/moon-phases 8-Phase Lunar Classification + Next Principal Phases #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/openephemeris-com:openephemeris-com-calendar-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

openephemeris-com-calendar-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: '**Open Ephemeris Engine** - Professional Astrological Calculations


    A high-performance REST API for precise astrological chart calculations using the SuperNOVAS / Calceph engine. ## Features


    - 🎯 **Precise Calculations**: SuperNOVAS / Calceph backend (NASA DE440) for astronomical accuracy

    - 🏗️ **Flexible Input Formats**: Support for multiple coordinate, datetime, and timezone formats

    - 🏠 **Seven House Systems**: Placidus (default), Koch, Porphyry, Regiomontanus, Campanus, Equal, and Whole Sign — the complete set, enumerated by `GET /ephemeris/house-systems`

    - ⚡ **High Performance**: Parallel processing and intelligent caching

    - 📊 **Comprehensive Data**: Complete natal charts with planets, houses, angles, and aspects

    - 🔒 **Input Validation**: Robust validation with clear error messages

    - 📖 **OpenAPI Documentation**: Interactive API documentation and schema validation

    - 🪐 **Transit Calculations**: Precise planetary transit timing with retrograde support

    - 📅 **Predictive Features**: Solar/lunar returns, sign ingresses, and future transits

    - 🤖 **Agent-First Design**: Optimized for LLM consumption and autonomous tool use


    ## Agent-First Design


    Open Ephemeris is built from the ground up to be "Agent-First". This means:


    1. **High Information Density**: We provide comprehensive metadata to minimize the need for external lookup. 2. **Optimized Projections**: The `format=llm` parameter converts raw astronomical data into a structure that LLMs can reason about more effectively, reducing token usage while preserving interpretive nuance. 3. **Deterministic Contract**: API responses are versioned and strictly typed to ensure reliable tool-calling for AI agents. ### Output Modes (`format` parameter)


    Endpoints supporting enhanced formatting accept a `format` query parameter:


    - `format=json` (default): The full, raw response schema — every field the endpoint produces, in its complete nested form. Choose it when you need the whole object graph. It does not carry more numeric resolution than `format=llm`: most angular values are serialized as 32-bit floats in both, which quantizes them to at worst about 0.055 arcsec (the step grows with the angle — finest near 0°, coarsest approaching 360°). `format=json` returns more fields, not more decimal places. - `format=llm`: A token-optimized projection. It replaces complex nested objects with flattened, "punchy" descriptions that provide immediate context for an LLM (e.g., automatically including the sign name alongside the degree). ## Authentication


    Open Ephemeris supports several authentication modes:


    1. **JWT tokens (end users)** via Supabase:


    ```http

    Authorization: Bearer

    ```


    2. **User API keys (integrations)** via `X-OpenEphemeris-API-Key`, `X-API-Key`, or `Authorization: Bearer`:


    ```http

    X-OpenEphemeris-API-Key: opene-... ```

    or

    ```http

    Authorization: Bearer opene-... ```


    *Note: Use `X-OpenEphemeris-API-Key` if your infrastructure (e.g. AWS/Azure) intercepts the standard `X-API-Key` header.*


    3. **Service API keys (internal services)** via `X-Service-Key` header:


    ```http

    X-Service-Key:

    ```


    Valid service keys are intended for trusted internal services and

    bypass rate limits. User requests remain subject to tier-based

    rate limiting and usage metering. ## Supported Formats


    ### Coordinates

    - **Decimal degrees**: `40.7128, -74.0060`

    - **DMS strings**: `"40°42''46"N", "74°00''22"W"`

    - **Component objects**: `{"degrees": 40, "minutes": 42, "seconds": 46, "direction": "N"}`


    ### DateTime


    **A datetime that states a clock time must also state its zone.** A

    zone-less clock time is rejected with `400 ambiguous_datetime`; it is not

    assumed to be UTC. An unstated zone moves the Ascendant by roughly 15° per

    hour while every planet keeps its sign, so a guess would be a confident

    wrong answer.'
  title: Open Ephemeris Calendar API
  version: 1.0.0
servers:
- description: Production
  url: https://api.openephemeris.com
tags:
- description: Mark the turning of the wheel. Cross-quarter days, exact moon phases, and lunar standstills. **10 units per request.**
  name: Calendar
paths:
  /calendar/astrology/cross-quarter:
    get:
      description: 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).
      operationId: cross_quarter_calendar_astrology_cross_quarter_get
      parameters:
      - description: 'Calendar year (Gregorian). Supported range: 1550–2649 (JPL DE440).'
        in: query
        name: year
        required: true
        schema:
          description: 'Calendar year (Gregorian). Supported range: 1550–2649 (JPL DE440).'
          example: 2025
          maximum: 2649
          minimum: 1550
          title: Year
          type: integer
      - description: 'Response format: json | llm.'
        in: query
        name: format
        required: false
        schema:
          title: Format
          type:
          - string
          - 'null'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrossQuarterResponse'
          description: 8 Wheel of the Year events in chronological order
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/app__api__models__schemas__system__ErrorResponse'
          description: Bad Request
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/app__api__models__schemas__system__ErrorResponse'
          description: Internal Server Error
      security:
      - bearerAuth: []
      - meridianApiKeyAuth: []
      - apiKeyAuth: []
      - serviceKeyAuth: []
      summary: Wheel of the Year — True Astronomical Dates
      tags:
      - Calendar
      x-meridian-tier: Explorer
      x-meridian-units: 5
  /calendar/astrology/lunar-standstill:
    get:
      description: 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.
      operationId: lunar_standstill_calendar_astrology_lunar_standstill_get
      parameters:
      - description: Date in YYYY-MM-DD format.
        in: query
        name: date
        required: false
        schema:
          title: Date
          type:
          - string
          - 'null'
      - description: Julian Day.
        in: query
        name: jd
        required: false
        schema:
          format: double
          title: Jd
          type:
          - number
          - 'null'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LunarStandstillResponse'
          description: Nodal cycle status and next standstill dates
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/app__api__models__schemas__system__ErrorResponse'
          description: Bad Request
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/app__api__models__schemas__system__ErrorResponse'
          description: Internal Server Error
      security:
      - bearerAuth: []
      - meridianApiKeyAuth: []
      - apiKeyAuth: []
      - serviceKeyAuth: []
      summary: Lunar Standstill — 18.6-Year Nodal Cycle Status
      tags:
      - Calendar
      x-meridian-tier: Explorer
      x-meridian-units: 2
  /calendar/astrology/moon-phases:
    get:
      description: '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.'
      operationId: moon_phases_calendar_astrology_moon_phases_get
      parameters:
      - description: Date in YYYY-MM-DD format. Mutually exclusive with jd.
        in: query
        name: date
        required: false
        schema:
          title: Date
          type:
          - string
          - 'null'
      - description: Julian Day. Mutually exclusive with date.
        in: query
        name: jd
        required: false
        schema:
          format: double
          title: Jd
          type:
          - number
          - 'null'
      - description: 'Response format: json | llm.'
        in: query
        name: format
        required: false
        schema:
          title: Format
          type:
          - string
          - 'null'
      - description: '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.'
        in: query
        name: supermoon_definition
        required: false
        schema:
          default: orbit_90
          description: '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.'
          enum:
          - orbit_90
          - year_90
          title: Supermoon Definition
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MoonPhasesResponse'
          description: Current phase and upcoming principal phases
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/app__api__models__schemas__system__ErrorResponse'
          description: Bad Request
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/app__api__models__schemas__system__ErrorResponse'
          description: Internal Server Error
      security:
      - bearerAuth: []
      - meridianApiKeyAuth: []
      - apiKeyAuth: []
      - serviceKeyAuth: []
      summary: 8-Phase Lunar Classification + Next Principal Phases
      tags:
      - Calendar
      x-meridian-tier: Explorer
      x-meridian-units: 2
components:
  schemas:
    LunarApsis:
      description: 'One lunar perigee (closest approach) or apogee (farthest point): the instant the Moon''s geocentric distance is at its minimum or maximum, found from DE440 to about a second.'
      properties:
        distance_km:
          description: Geometric Earth-Moon centre-to-centre distance at the apsis, km.
          format: double
          type: number
        time:
          description: Instant of the apsis, ISO-8601 with the UTC offset of the response's timezone.
          format: date-time
          type: string
        type:
          description: perigee or apogee (stable id).
          enum:
          - perigee
          - apogee
          type: string
      required:
      - type
      - time
      - distance_km
      title: LunarApsis
      type: object
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          title: Detail
          type: array
      title: HTTPValidationError
      type: object
    CrossQuarterResponse:
      description: Solar events and cross-quarter days.
      properties:
        _meta:
          description: Calculation metadata
          title: ' Meta'
          type: object
        events:
          description: List of solar events in chronological order
          items:
            $ref: '#/components/schemas/CrossQuarterEvent'
          title: Events
          type: array
        year:
          description: Year of the events
          title: Year
          type: integer
      required:
      - year
      - events
      - _meta
      title: CrossQuarterResponse
      type: object
    MoonPhasesResponse:
      description: Moon phases over a date range.
      properties:
        _meta:
          description: Calculation metadata
          title: ' Meta'
          type: object
        data:
          allOf:
          - $ref: '#/components/schemas/LunarPhaseResult'
          description: The matching phase events
        range:
          additionalProperties:
            type: string
          description: Start and end dates of the search
          title: Range
          type: object
      required:
      - range
      - data
      - _meta
      title: MoonPhasesResponse
      type: object
    LunarPhaseResult:
      properties:
        apsides:
          description: Perigees and apogees in the same 30-day range, in time order (times in UTC).
          items:
            $ref: '#/components/schemas/LunarApsis'
          type: array
        current_phase:
          description: The eight-bucket lunar phase the Moon is in at the query instant (new_moon, waxing_crescent, first_quarter, waxing_gibbous, full_moon, waning_gibbous, third_quarter, waning_crescent). This is a state at the requested date/jd, not a phase event, and it is never included in events.
          title: Current Phase
          type: string
        events:
          description: Principal phase events (new_moon, first_quarter, full_moon, third_quarter) occurring in the requested range, each timed to the exact moment the phase is reached. Sorted chronologically.
          items:
            $ref: '#/components/schemas/MoonPhaseEvent'
          title: Events
          type: array
        supermoon_definition:
          description: 'The supermoon_definition applied: orbit_90 or year_90.'
          type: string
      required:
      - events
      title: LunarPhaseResult
      type: object
    MoonPhaseEvent:
      properties:
        distance_class:
          description: 'New and Full Moon only: supermoon (relative_distance >= 0.9), micromoon (<= 0.1) or regular.'
          enum:
          - supermoon
          - micromoon
          - regular
          type: string
        distance_km:
          description: 'New and Full Moon only: geometric Earth-Moon centre-to-centre distance at the phase, km.'
          format: double
          type: number
        phase:
          description: One of new_moon, first_quarter, full_moon, third_quarter
          title: Phase
          type: string
        relative_distance:
          description: 'New and Full Moon only: (Da - D) / (Da - Dp) under supermoon_definition; 1 at perigee distance, 0 at apogee distance.'
          format: double
          type: number
        time:
          description: ISO 8601 UTC timestamp of exactly when the phase occurs
          title: Time
          type: string
      required:
      - phase
      - time
      title: MoonPhaseEvent
      type: object
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          title: Location
          type: array
        msg:
          title: Message
          type: string
        type:
          title: Error Type
          type: string
      required:
      - loc
      - msg
      - type
      title: ValidationError
      type: object
    LunarStandstillResponse:
      description: Lunar standstills for a specific year.
      properties:
        _meta:
          description: Calculation metadata
          title: ' Meta'
          type: object
        events:
          description: Standstill events in the year
          items:
            $ref: '#/components/schemas/LunarStandstillInfo'
          title: Events
          type: array
        year:
          description: Year searched
          title: Year
          type: integer
      required:
      - year
      - events
      - _meta
      title: LunarStandstillResponse
      type: object
    CrossQuarterEvent:
      properties:
        declination:
          description: Sun's declination at the time of the event
          title: Declination
          type: number
        distance_au:
          description: Sun's distance in AU
          title: Distance Au
          type: number
        name:
          description: Event name (e.g., Vernal Equinox)
          title: Name
          type: string
        time:
          description: ISO 8601 UTC timestamp of exactly when the event occurs
          title: Time
          type: string
        type:
          description: '''equinox'', ''solstice'', or ''cross-quarter'''
          title: Type
          type: string
      required:
      - name
      - type
      - time
      - declination
      - distance_au
      title: CrossQuarterEvent
      type: object
    LunarStandstillInfo:
      properties:
        declination:
          description: Moon's declination at the peak
          title: Declination
          type: number
        node_distance:
          description: Angular distance to the node
          title: Node Distance
          type: number
        peak_date:
          description: ISO 8601 UTC timestamp of the peak of the standstill
          title: Peak Date
          type: string
        type:
          description: '''major'' or ''minor'''
          title: Type
          type: string
      required:
      - type
      - peak_date
      - declination
      - node_distance
      title: LunarStandstillInfo
      type: object
    app__api__models__schemas__system__ErrorResponse:
      additionalProperties: false
      description: Standardized error response.
      properties:
        debug_info:
          anyOf:
          - type: object
          description: Debug information
          title: Debug Info
        details:
          anyOf:
          - type: object
          description: Additional error details
          title: Details
        error:
          description: Error type/category
          title: Error
          type: string
        message:
          description: Human-readable error message
          title: Message
          type: string
        request_id:
          anyOf:
          - type: string
          description: Request identifier
          title: Request Id
        success:
          default: false
          description: Always false for errors
          title: Success
          type: boolean
        timestamp:
          description: Error timestamp
          format: date-time
          title: Timestamp
          type: string
      required:
      - error
      - message
      - timestamp
      title: ErrorResponse
      type: object
  securitySchemes:
    apiKeyAuth:
      in: header
      name: X-API-Key
      type: apiKey
    bearerAuth:
      bearerFormat: JWT/API-Key
      scheme: bearer
      type: http
    meridianApiKeyAuth:
      in: header
      name: X-OpenEphemeris-API-Key
      type: apiKey
    serviceKeyAuth:
      in: header
      name: X-Service-Key
      type: apiKey