---
title: "Biodynamic monthly calendar"
method: GET
path: "/ephemeris/agro/calendar"
tags: ["agricultural"]
---

# Biodynamic monthly calendar

`GET /ephemeris/agro/calendar`

## Request

- Base URL: `https://api.openephemeris.com`
- URL: `https://api.openephemeris.com/ephemeris/agro/calendar`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-OpenEphemeris-API-Key`
  - API key in header `X-API-Key`
  - API key in header `X-Service-Key`

Returns compact biodynamic summaries for a date range (max 31 days).

Each day includes: day type, quality score, ascending status, void-of-course
active flag, phase name, and illumination percentage. Designed for building
monthly planning calendars.

🤖 AI-optimized output available — add `format=llm` to reduce payload ~80%.

```bash
GET /ephemeris/agro/calendar?lat=-33.87&lon=151.21&start=2026-03-01&end=2026-03-31&tz=Australia/Sydney
```

## Query parameters

- `lat` number, required: Observer latitude (WGS84, degrees)
- `lon` number, required: Observer longitude (WGS84, degrees)
- `start` string, required: Start date as YYYY-MM-DD
- `end` string, required: End date as YYYY-MM-DD (inclusive, max 31 days from start)
- `elev` number: 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.
- `format` string: Output format

## Headers

- `authorization` string, nullable
- `X-API-Key` string, nullable
- `X-OpenEphemeris-API-Key` string, nullable
- `apikey` string, nullable

## Response `200`

Successful Response

- AgroCalendarResponse: Multi-day calendar summary.
  - `_meta` object, required: Calculation metadata
  - `days` AgroCalendarDay[], required: Daily biodynamic summaries
    - `ascending` boolean, required: True if Moon latitude is increasing
    - `date` string, required: Date in YYYY-MM-DD format
    - `day_type` string: root | leaf | flower | fruit
    - `error` string: Error message if calculation failed
    - `illumination_pct` number: Illumination percentage
    - `phase_name` string: Current moon phase name
    - `quality_score` integer: Quality score from 0 to 100
    - `spring_neap_index` number: Spring-neap index
    - `total_forcing` number: Total tidal forcing score
    - `void_active` boolean, required: True if Void of Course is active during the day
  - `observer` object, required: Observer location details
  - `range` object, required: Start and end dates of the calendar

## Other responses

- `400`: Bad Request
- `422`: Validation Error
- `500`: Internal Server Error

---

[API](https://skmtc.dev/openephemeris/apis/open-ephemeris-api.md) · [All operations](https://skmtc.dev/openephemeris/apis/open-ephemeris-api/llms.txt) · [OpenAPI document](https://skmtc.dev/openephemeris/apis/open-ephemeris-api/revisions/d195a769cb89?raw)
