arazzo: 1.0.1
info:
title: Tonight's sky for a place
version: 1.0.0
summary: >-
Resolve a place name, take the whole-sky snapshot, then find the dark
moonless observing window for the next week.
sourceDescriptions:
- name: darkWindowApi
url: ../openapi/cyclecalcs-dark-window-api-openapi.yml
type: openapi
- name: placesApi
url: ../openapi/cyclecalcs-places-api-openapi.yml
type: openapi
- name: todayApi
url: ../openapi/cyclecalcs-today-api-openapi.yml
type: openapi
workflows:
- workflowId: tonightsSkyForAPlace
summary: Place name to a usable observing plan in three keyless GETs.
inputs:
type: object
required: [place]
properties:
place:
type: string
description: 'City or "City,CC" with an ISO country code, e.g. "Lisbon,PT".'
nights:
type: integer
description: How many nights of dark window to rank (1-62).
steps:
- stepId: resolvePlace
description: Resolve the place name to coordinates and an IANA timezone.
operationId: getPlaces
parameters:
- name: q
in: query
value: $inputs.place
- name: limit
in: query
value: 1
successCriteria:
- condition: $statusCode == 200
outputs:
lat: $response.body#/data/results/0/latitude
lon: $response.body#/data/results/0/longitude
tz: $response.body#/data/results/0/timezone
attribution: $response.body#/attribution
- stepId: skyToday
description: One-call whole-sky snapshot for that place, right now.
operationId: getToday
parameters:
- name: lat
in: query
value: $steps.resolvePlace.outputs.lat
- name: lon
in: query
value: $steps.resolvePlace.outputs.lon
- name: tz
in: query
value: $steps.resolvePlace.outputs.tz
successCriteria:
- condition: $statusCode == 200
outputs:
summary: $response.body#/data/summary
- stepId: darkWindow
description: The genuinely dark, moonless window per night, ranked.
operationId: getDarkWindow
parameters:
- name: lat
in: query
value: $steps.resolvePlace.outputs.lat
- name: lon
in: query
value: $steps.resolvePlace.outputs.lon
- name: tz
in: query
value: $steps.resolvePlace.outputs.tz
- name: nights
in: query
value: $inputs.nights
successCriteria:
- condition: $statusCode == 200
outputs:
nights: $response.body#/data
outputs:
summary: $steps.skyToday.outputs.summary
darkNights: $steps.darkWindow.outputs.nights
attribution: $steps.resolvePlace.outputs.attribution
x-generated: '2026-08-09'
x-method: generated
x-note: >-
Every operationId is verbatim from the harvested OpenAPI. No key is required
for any step; the free Basic tier serves all three. The `attribution` output
is carried through deliberately — resolving a place puts a GeoNames CC BY 4.0
credit obligation on the response.
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.