Naked-eye limiting magnitude and aperture reach for a sky class you supply, with an explicit machine-readable statement that the number is a tuned estimate rather than a measurement

Naked-eye limiting magnitude and aperture reach for a sky class you supply, with an explicit machine-readable statement that the number is a tuned estimate rather than a measurement. Formats: json, csv, txt. Example: GET /v2/sky-quality?bortle=3&equipment=telescope&aperture_mm=200

get/v2/sky-quality

Request

  • Base URL: https://www.cyclecalcs.com
  • URL: https://www.cyclecalcs.com/v2/sky-quality
  • Auth: one of:
    • none
    • API key in header X-RapidAPI-Key

Query parameters

bortleinteger

The Bortle dark-sky class, 1 (excellent) to 9 (inner-city). Mutually exclusive with nelm; one of the two is required.

nelmnumber

Naked-eye limiting magnitude, 2.0 to 8.5. Mutually exclusive with bortle; one of the two is required.

equipment'naked_eye' | 'binoculars' | 'telescope'

What the observation is made with.

aperture_mmnumber

Telescope aperture in millimetres. Only used when equipment=telescope.

latnumber

Latitude in decimal degrees, north positive. No compass suffix (do not append N or S). Required together with lon, or neither.

lonnumber

Longitude in decimal degrees, east positive. No compass suffix (do not append E or W). Required together with lat, or neither.

elevation_mnumber

Observer elevation above mean sea level, in metres. Raises the observer on a locally flat plateau; sea-horizon dip is not modeled.

placestring

A place name (place=London), a name with a country (place=Cambridge,GB), or a stable identifier from GET /v2/places (place=id:us-n35198-w111651). Supplies lat, lon and, unless tz is also sent, the time zone. Mutually exclusive with sending lat and lon directly. Withheld unless GET /v2 reports capabilities.place_lookup true.

place_strategy'best' | 'error'

best guesses the intended place when a name is ambiguous and reports the guess as a warning. error refuses an ambiguous name with 400 AMBIGUOUS_PLACE and the candidates in supported. Only meaningful with place.

atstring

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 (+hh:mm, no seconds). No offset and no tz reads as UTC. Or jd: followed by a Julian Day on the UT scale, read as UTC whatever tz says: jd:2461000.5 is 2025-11-21T00:00:00Z. Reliable from 1700 to 2200.

tzstring

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. Before 1970 the tz database records the history of a zone for its principal location only, and some names are links to another zone: the tz_source_boundary_1970 warning names whose history was used, and tzdb_lmt_interval marks a local mean time. Neither changes an offset.

ambiguous'first' | 'last' | 'error'

How to resolve a local time that a clock repeated, such as the return from daylight saving. error refuses with 409 AMBIGUOUS_LOCAL_TIME.

nonexistent'error' | 'shift_forward' | 'shift_back'

How to resolve a local time that never happened, such as inside a spring-forward gap. error refuses with 400 NONEXISTENT_LOCAL_TIME.

include'showpieces' | 'ladder' | 'sky_conditions'

Comma-separated optional blocks to include. Omit for the endpoint default set.

refraction'normal' | 'none'

normal applies Saemundsson refraction to apparent altitude; none reports the unrefracted geometric altitude.

time_format'iso' | 'unix'

How instants are rendered: iso for ISO 8601 strings carrying the effective offset, or unix for integer seconds since the epoch. An ISO offset has no seconds field, so an instant in a pre-1972 local mean time era whose offset has seconds (Moscow +02:30:17 until 1916) is written in UTC with a Z; utc_offset_seconds stays exact, utc_offset_iso rounds it to the nearest minute, and the tzdb_lmt_interval warning says so.

formatstring

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.

fieldsstring

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.

shape'nested' | 'flat'

nested returns the documented object tree. flat returns one object with dotted keys, format=json only.

precisioninteger

Decimal places for numeric fields.

pretty0 | 1

Whether the JSON body is indented (1) or compact (0). Has no effect on csv or txt.

verbosity'full' | 'compact'

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.

Response

The answer.

endpointstring required

The endpoint path that produced this response.

computed_atstring date-time required

A revision stamp, never a wall clock: identical requests return identical bytes, so a fixed_instant or reference response can be cached for a year and 304 stays reachable.

queryobject required

The request as understood: every resolved input (instant, location, presentation options) plus ignored, in the order spec-00 13.2 defines. Shape is endpoint-specific.

dataunknown required
linksobject required

Related URLs. self reproduces this exact response; docs is always present; others (page, spec, next, first, explain) appear where relevant.

metaobject required

Provenance: engine version, rights and attribution, cache class, accuracy statement, tzdb version, and endpoint-specific conventions (refraction model, horizon definitions, time scales, and so on). Never subject to fields projection.

attributionstring required

The credit line, byte-identical to meta.attribution.text.

docsstring uri required

The human-readable reference section for this endpoint.

Example response

{
  "endpoint": "/v2/sun",
  "computed_at": "2026-08-01T00:00:00.000Z",
  "links": {
    "self": "https://www.cyclecalcs.com/v2/sun?at=2026-06-21&lat=51.4778&lon=-0.0015",
    "docs": "https://www.cyclecalcs.com/api/reference.html#sun",
    "spec": "https://www.cyclecalcs.com/v2/openapi.json",
    "page": "https://www.cyclecalcs.com/sunrise-sunset-calculator.html",
    "explain": "https://www.cyclecalcs.com/learn/seasons.html"
  },
  "attribution": "Computed by CycleCalcs (cyclecalcs.com) with the MIT-licensed Astronomy Engine. Positional astronomy only.",
  "docs": "https://www.cyclecalcs.com/api/reference.html#sun"
}

Changes

No recorded changes to this operation across all 1 revision of this API.