{ "opencollection": "1.0.0", "info": { "name": "CycleCalcs Astronomy Cycles API", "version": "2.0.0" }, "items": [ { "info": { "name": "Cycles", "type": "folder" }, "items": [ { "info": { "name": "Where we are in every astronomical cycle the site tracks, with an explicit statement of whether each number was computed, observed, or is an interval with no live phase", "type": "http" }, "http": { "method": "GET", "url": "https://www.cyclecalcs.com/v2/cycles", "params": [ { "name": "at", "value": "2026-07-28T21:30:00Z", "type": "query", "description": "The instant to evaluate. ISO 8601: a date (2026-06-21), or a date and time with an optional seconds, fraction and either Z or a numeric UTC offset. No offset and no `tz` reads as UTC. Reliable from 1700 to 2200." }, { "name": "start", "value": "2026-01-01", "type": "query", "description": "The start of a range query, inclusive. ISO 8601: a date (2026-06-21), or a date and time with an optional seconds, fraction and either Z or a numeric UTC offset. No offset and no `tz` reads as UTC. Reliable from 1700 to 2200." }, { "name": "end", "value": "2027-01-01", "type": "query", "description": "The end of a range query. A row landing exactly on `end` IS returned: the window is [start, end]. Every endpoint's rule is published as data under limits.range_boundaries in /v2/conventions. ISO 8601: a date (2026-06-21), or a date and time with an optional seconds, fraction and either Z or a numeric UTC offset. No offset and no `tz` reads as UTC. Reliable from 1700 to 2200." }, { "name": "step", "value": "1d", "type": "query", "description": "Sampling stride for a range query: a number plus a unit, one of min, m (minute), h (hour), d (day), w (week), mo (month) or y (year), for example 1h, 6h or 1d. Resolves to at least 1 minute and at most 1 year. Needs `start`. This is the generic grammar; an endpoint that narrows it documents the narrowing on its own `step` parameter, and /v2/conventions publishes every narrowing under limits.step_grammar.endpoint_policies." }, { "name": "count", "value": "30", "type": "query", "description": "Number of rows to return from a range query, counted forward from `start`. Mutually exclusive with `end`." }, { "name": "keys", "value": "synodic_month", "type": "query", "description": "A comma-separated list of specific cycle keys to return. Mutually exclusive with `kind`/`family`. Omit for every cycle." }, { "name": "kind", "value": "computed_phase", "type": "query", "description": "Filter cycles by how their current position is known: computed from the ephemeris, observed (a live dataset), a named interval with no live phase, or a discrete state." }, { "name": "family", "value": "conjunction", "type": "query", "description": "Filter to one cycle family. Mutually exclusive with `keys`." }, { "name": "include", "value": "fraction,next_event", "type": "query", "description": "Comma-separated optional blocks to include. Omit for the endpoint default set." }, { "name": "tz", "value": "Europe/London", "type": "query", "description": "An IANA time zone name, for example Europe/London or America/Chicago. Numeric offsets and abbreviations are not accepted. Governs how a date-only or offset-free `at`/`start`/`end` is read, and how local instants are rendered when time_format=iso." }, { "name": "ambiguous", "value": "first", "type": "query", "description": "How to resolve a local time that a clock repeated, such as the return from daylight saving. error refuses with 409 AMBIGUOUS_LOCAL_TIME." }, { "name": "nonexistent", "value": "error", "type": "query", "description": "How to resolve a local time that never happened, such as inside a spring-forward gap. error refuses with 400 NONEXISTENT_LOCAL_TIME." }, { "name": "time_format", "value": "iso", "type": "query", "description": "How instants are rendered: iso for ISO 8601 strings carrying the effective offset, or unix for integer seconds since the epoch." }, { "name": "format", "value": "json", "type": "query", "description": "Response representation. Each endpoint serves a subset of json, csv and txt; see that operation's description for the exact list, or GET /v2 for every endpoint's formats array. An unsupported value is 400 BAD_FORMAT with the accepted list in `supported`." }, { "name": "fields", "value": "", "type": "query", "description": "Comma-separated dot paths into `data` (for example moon.phase_name,moon.illumination) so only those fields are returned. Up to 64 paths; an array element is addressed by its object key, never by index." }, { "name": "shape", "value": "nested", "type": "query", "description": "nested returns the documented object tree. flat returns one object with dotted keys, format=json only." }, { "name": "precision", "value": "6", "type": "query", "description": "Decimal places for numeric fields." }, { "name": "pretty", "value": "1", "type": "query", "description": "Whether the JSON body is indented (1) or compact (0). Has no effect on csv or txt." }, { "name": "verbosity", "value": "full", "type": "query", "description": "full includes prose notes, frame definitions and withheld-field reasons in meta. compact keeps every value and every machine-readable name and drops the prose." }, { "name": "limit", "value": "", "type": "query", "description": "See the endpoint description at /api/reference.html." } ] }, "docs": "Where we are in every astronomical cycle the site tracks, with an explicit statement of whether each number was computed, observed, or is an interval with no live phase. Formats: json, csv, txt. Example: GET /v2/cycles?at=2026-07-28T21:30:00Z" } ] } ], "bundled": true }