Skip to content
AsteriaStar
Open Data API · v0

API reference

A read-only, deterministic projection of the knowledge graph. Ten endpoints are implemented today; every response is wrapped in a provenance envelope.

Basics

  • Base path: /api/v0
  • Format: JSON, UTF-8. Method: GET only.
  • No authentication, no API keys, no rate limits.
  • No cookies, tracking, user data, or write/upload endpoints.
  • Cacheable & deterministic — the same request returns the same bytes for a data version.
  • Spec: /api/v0/openapi.json

The response envelope

Every response carries provenance metadata alongside its data:

{
  "meta": {
    "apiVersion": "v0",
    "schemaVersion": "1.0.0",
    "dataVersion": "1.0.0",
    "generatedAt": "2026-06-29T00:00:00Z",
    "source": "Asteria Star — Scientific Data Engine & Knowledge Graph",
    "license": "CC BY-SA 4.0",
    "attribution": "Asteria Star (asteriastar) — https://asteriastar.com. Underlying source data retains its own licenses; see https://asteriastar.com/data/licensing.",
    "provenance": "How this response was derived.",
    "docs": "https://asteriastar.com/developers/api"
  },
  "count": 8,
  "data": "…"
}
GET/api/v0/entities
Implemented

Paginated list of canonical entities, sorted by stable id. Every item carries its id, type, name, domain, and canonical path.

ParameterInTypeDescription
typequerystringFilter by entity type (e.g. star, planet, galaxy).
domainquerystringFilter by domain (science, culture, astrology).
limitqueryintegerMaximum results to return (default 100, max 1000).
offsetqueryintegerNumber of results to skip for pagination.

Returns

{ total, offset, limit, count, items: Entity[] }

GET/api/v0/entities/{id}
Implemented

Resolve a single entity by its stable id, including its typed relationships (with direction and the entity on the other end).

ParameterInTypeDescription
id*pathstringStable entity id (type:slug).

Returns

Entity & { relationships: RelationshipEdge[] }

GET/api/v0/relationships
Implemented

Paginated list of typed, domain-tagged relationships. Filter by relation type, domain, or a specific from/to entity id.

ParameterInTypeDescription
typequerystringFilter by relation type.
domainquerystringFilter by domain (science, culture, astrology).
fromquerystringFilter to relationships originating at this entity id.
toquerystringFilter to relationships pointing at this entity id.
limitqueryintegerMaximum results to return (default 200, max 2000).
offsetqueryintegerNumber of results to skip for pagination.

Returns

{ total, offset, limit, count, items: Relationship[] }

GET/api/v0/search
Implemented

Deterministic, non-semantic entity search over name, aliases, and id. Ranking is fixed (exact > prefix > alias > substring); there is no AI or fuzzy relevance.

ParameterInTypeDescription
q*querystringSearch query.
typequerystringFilter by entity type (e.g. star, planet, galaxy).
domainquerystringFilter by domain (science, culture, astrology).
limitqueryintegerMaximum results to return (default 20, max 100).

Returns

{ query, count, results: SearchHit[] }

GET/api/v0/traversal
Implemented

Breadth-first traversal from a start entity, returning nodes and edges. Cycle-protected and bounded by maxDepth and limit; truncation is reported in warnings.

ParameterInTypeDescription
start*querystringStart entity id.
maxDepthqueryintegerTraversal depth (default 2, max 5).
relationTypesquerystringComma-separated relation types to follow.
domainquerystringRestrict to science, culture/astrology (interpretive), or all.
limitqueryintegerMaximum results to return (default 100, max 500).

Returns

{ start, nodes[], edges[], truncated, warnings[] }

GET/api/v0/assistant/explain
Implemented

A grounded explanation of an entity — its description, its real graph relations, and its cited sources. Deterministic; no language model. Nothing is generated or invented.

ParameterInTypeDescription
id*querystringEntity id to explain.

Returns

{ entity, description?, sources?, links[], citations[] }

GET/api/v0/assistant/compare
Implemented

Compares two entities by the real common ground between them — the entities they both connect to in the graph. Deterministic; no language model.

ParameterInTypeDescription
a*querystringFirst entity id.
b*querystringSecond entity id.

Returns

{ a, b, shared: Ref[] }

GET/api/v0/assistant/path
Implemented

The shortest evidence path between two entities — a real chain of graph relations. Deterministic; no language model. 404 with an honest message when no path exists.

ParameterInTypeDescription
from*querystringStart entity id.
to*querystringTarget entity id.
GET/api/v0/datasets
Implemented

The full open-data catalogue — domain datasets and graph-level datasets — with real record counts, licenses, formats, and status.

Returns

{ count, datasets: CatalogueEntry[] }

GET/api/v0/datasets/{id}
Implemented

Metadata for a single dataset by id, including its formats and (where a pre-generated file exists) real size and sha256.

ParameterInTypeDescription
id*pathstringDataset id.

Returns

CatalogueEntry

GET/api/v0/citations
Implemented

The real citation registry — source-backed references across flagship entities and datasets, with DOIs where verified. Filter by type, source, entity, or dataset.

ParameterInTypeDescription
typequerystringFilter by citation type (e.g. peer_reviewed_paper, dataset).
sourcequerystringFilter by source-registry key (e.g. nasa, esa).
entityquerystringFilter to citations supporting an entity id.
datasetquerystringFilter to citations supporting a dataset slug.
limitqueryintegerMaximum results (default 200, max 500).
offsetqueryintegerPagination offset.

Returns

{ total, offset, limit, count, items: Citation[] }

GET/api/v0/citations/{id}
Implemented

A single citation by id, including its type, DOI (if verified), links to entities/datasets/provenance, and formatted references.

ParameterInTypeDescription
id*pathstringCitation id.

Returns

Citation & { formats }

GET/api/v0/images
Implemented

Catalogue of verified scientific images with depicted object, capturing instrument, source, and license. Image files retain their upstream license.

ParameterInTypeDescription
limitqueryintegerMaximum results to return (default 50, max 200).

Returns

{ total, count, items: Image[] }

GET/api/v0/sources
Implemented

The platform's source registry — every source's name, organisation, canonical URL, scope, authority type, and usage terms. The provenance behind every cited fact.

Returns

{ count, sources: Source[] }

GET/api/v0/live-sky/providers
Implemented

The registry of external providers the live-sky layer is designed to integrate. Every provider reports its integration status honestly: NOAA SWPC and NASA DONKI are connected, the rest are planned.

Returns

{ count, connected, providers: Provider[] }

GET/api/v0/live-sky/moon
Implemented

The computed Moon (method: computed — not a live provider feed), with its own honesty envelope. WITHOUT latitude/longitude: the global Moon phase and illuminated fraction. WITH latitude and longitude: location-aware moonrise, moonset, transit, topocentric position, phase, and horizon status for the date (polar and no-rise/no-set cases handled honestly). Location is only ever what you pass in — never inferred, geolocated, or stored.

ParameterInTypeDescription
datequerystringCompute for a specific date (YYYY-MM-DD or ISO-8601). Defaults to the current instant / today.
latitudequerystringObserver latitude, −90 to 90. When given (with longitude), returns location-aware moonrise/moonset/position.
longitudequerystringObserver longitude, −180 to 180. Required together with latitude.
timezonequerystringIANA timezone id for local event times (e.g. Europe/Prague). Defaults to UTC.

Returns

MoonData & { envelope } | MoonPositionData & { envelope }

GET/api/v0/live-sky/sun
Implemented

Sunrise, sunset, solar noon, civil/nautical/astronomical twilight, day length, and a solar summary for an EXPLICIT location and date, deterministically COMPUTED from the public-domain NOAA Solar Calculator algorithm (method: computed — not a live provider feed). Polar day/night is handled honestly (null events + a status). Location is only ever what you pass in — never inferred, geolocated, or stored.

ParameterInTypeDescription
latitude*querystringObserver latitude as a decimal number, −90 to 90.
longitude*querystringObserver longitude as a decimal number, −180 to 180.
datequerystringCivil date (YYYY-MM-DD). Defaults to today (UTC).
timezonequerystringIANA timezone id for local times (e.g. Europe/Prague). Defaults to UTC.
GET/api/v0/live-sky/planets
Implemented

Computed, location-aware visibility for the naked-eye planets (Mercury–Saturn; Uranus/Neptune via ?planet): rise, set, transit, topocentric position, approximate magnitude, and conservative honest observing rules (method: computed — not a live provider feed). Positions use the public-domain NASA/JPL approximate planetary elements. Location is only ever what you pass in — never inferred, geolocated, or stored.

ParameterInTypeDescription
latitude*querystringObserver latitude as a decimal number, −90 to 90.
longitude*querystringObserver longitude as a decimal number, −180 to 180.
datequerystringCivil date (YYYY-MM-DD). Defaults to today.
timezonequerystringIANA timezone id for local times (e.g. Europe/Prague). Defaults to UTC.
planetquerystringOne planet (mercury|venus|mars|jupiter|saturn|uranus|neptune). Default is the five naked-eye planets.
GET/api/v0/live-sky/tonight
Implemented

A computed COMPOSITE of the Sun & Twilight, Moon, and Planet engines (method: computed_composite — not a live provider feed): twilight/darkness summary and night type, Moon phase/rise/set/position and moonlight impact, ranked naked-eye planet visibility, and best observing windows for an EXPLICIT location and date. It invents no weather, cloud, seeing, ISS, aurora, meteor, or comet data; a sub-engine failure yields a null section plus a limitation. Location is only ever what you pass in — never inferred, geolocated, or stored.

ParameterInTypeDescription
latitude*querystringObserver latitude as a decimal number, −90 to 90.
longitude*querystringObserver longitude as a decimal number, −180 to 180.
datequerystringCivil date (YYYY-MM-DD). Defaults to today.
timezonequerystringIANA timezone id for local times (e.g. Europe/Prague). Defaults to UTC.
GET/api/v0/openapi.json
Implemented

The OpenAPI 3.1 description of every implemented endpoint. Planned endpoints are intentionally absent from the spec.

Returns

OpenAPI 3.1 document

GET/api/v0/contribution-types
Implemented

The typed contribution models the scientific review workflow accepts, with their required targets, review track, and quality impact. Read-only.

Returns

{ count, contributionTypes: ContributionType[] }

GET/api/v0/review-states
Implemented

The contribution review-state machine: every state, its description, and its valid next states. Read-only.

Returns

{ count, states: ReviewState[] }

GET/api/v0/contribution-guidelines
Implemented

The workflow's core principle, contribution types, review states, roles, and security model — everything a future contributor or client needs. Read-only.

Returns

{ principle, types, states, roles, security }

GET/api/v0/live/space-weather
Implemented

Every current space-weather product from NOAA SWPC in one response: real-time solar wind and interplanetary magnetic field at L1, the propagated solar-wind series, observed and forecast planetary K-index, the R/S/G scales, the alert stream, the GOES X-ray flare state, the daily active-region report, the 10.7 cm radio flux, and the OVATION aurora forecast. Each product carries its own honesty envelope: provider, exact source URL, the provider's timestamp, freshness status, cache window, licence and limitations. A product that could not be read is present with a status and a reason and NO data key.

Returns

Record<productName, LiveEnvelope>

GET/api/v0/live/space-weather/solar
Implemented

The GOES X-ray flare state, NOAA's daily numbered active regions with sunspot and magnetic classifications, the 10.7 cm radio flux, and NASA CCMC DONKI's curated flare and CME catalogues. The operational reading and the curated catalogue are separate keys and are never merged: they have different latencies and answer different questions.

Returns

Record<productName, LiveEnvelope>

GET/api/v0/live/space-weather/geomagnetic
Implemented

The planetary K-index observed and forecast, the NOAA R/S/G scales, and SWPC's watch, warning and alert stream. Every Kp point carries a provenance field of observed, estimated or predicted, so no consumer has to guess whether a value is a measurement or a forecast.

Returns

Record<productName, LiveEnvelope>

GET/api/v0/live/space-weather/events
Implemented

NASA CCMC DONKI's catalogued solar flares, coronal mass ejections, geomagnetic storms and solar energetic particle events. An empty array means the catalogue held no records in the window, which is not the same as nothing having happened: DONKI is analyst-curated and lags events by hours.

Returns

Record<productName, LiveEnvelope>

GET/api/v0/live/providers
Implemented

Every live provider and product: its terms, authentication, documented rate limits, cache window, publication cadence, stale threshold, and what THIS server instance has actually observed of it — last attempt, last success, latency, consecutive failures and schema state. There is no uptime percentage and no reliability score: this deployment retains no operational history, so a long-run figure would be invented.

Returns

{ totals, providers: LiveProviderReport[] }

GET/api/v0/live/neo
Implemented

Every near-Earth object feed in one response: close approaches within 0.05 au over the next 60 days, the CNEOS Sentry impact-risk table, newly catalogued objects, and the Minor Planet Center's unconfirmed candidates. Close-approach times are TDB, not UTC. Impact probabilities are JPL's own and carry JPL's statement that they can be inaccurate by a factor of ten; AsteriaStar computes none of its own.

Returns

{ totals, closeApproaches, sentry, recent, candidates } — each an envelope

GET/api/v0/live/neo/close-approaches
Implemented

Near-Earth objects passing within 0.05 au over the next 60 days, each resolved against AsteriaStar's catalogue. Every approach carries its nominal distance in astronomical units, kilometres and lunar distances, the provider's 3-sigma minimum and maximum, and the 3-sigma uncertainty in the approach time — a nominal distance served without its bounds would turn a prediction with real error bars into a fact.

Returns

LiveEnvelope<ResolvedCloseApproach[]>

GET/api/v0/live/neo/{designation}
Implemented

Everything the four live feeds currently say about one object. This endpoint does NOT proxy the provider: the designation comes from the request, and no value from a request is ever placed into a provider URL. The feeds are loaded from their own constant URLs and matched locally, so a designation absent here is absent from these four feeds — not from JPL's database.

ParameterInTypeDescription
designation*pathstringObject designation, 1-40 characters of letters, digits, spaces, dots, slashes or hyphens.

Returns

{ designation, foundInLiveFeeds, catalogue, closeApproaches, sentry, recentEntry, confirmationPageCandidate }

GET/api/v0/live/satellites
Implemented

Every satellite AsteriaStar tracks live, which is one: the International Space Station, from NASA Johnson Space Center's published operational ephemeris. The response states its own coverage explicitly rather than leaving it to be inferred from a single-element array.

Returns

{ trackedCount, coverage, satellites[], providers[] }

GET/api/v0/live/satellites/{id}
Implemented

Position, altitude, speed and measured nodal period for one satellite, plus `frameVerification` — the measured disagreement between this platform's coordinate transformation and NASA's own published equator-crossing longitudes from the same file. A consumer relying on these positions is entitled to see how far they can be trusted, measured rather than claimed. `current` is null when the published ephemeris does not cover the present moment; nothing is extrapolated past its end.

ParameterInTypeDescription
id*pathstringSatellite id. The only recognised value is `iss` (also accepts 25544).

Returns

{ id, name, ephemeris, current, frameVerification[] }

GET/api/v0/live/satellites/{id}/passes
Implemented

Pass predictions for coordinates you supply. The coordinates are used to evaluate a pure function and are NOT logged, stored, counted or transmitted anywhere; nothing is inferred, geolocated or defaulted, and omitting them returns an error rather than a guess. Each pass states whether it is actually visible — sunlit station, dark sky — or which of those conditions failed. No weather is modelled. Note that the website itself does not call this endpoint: the pass page ships orbital data to the browser and computes there, so a reader's coordinates never leave their device at all.

ParameterInTypeDescription
id*pathstringSatellite id; `iss` only.
latitude*querystringObserver latitude in decimal degrees, -90 to 90.
longitude*querystringObserver longitude in decimal degrees, -180 to 180.
hoursqueryintegerWindow length in hours (default 48, maximum 240). Predictions stop where the published ephemeris stops.

Returns

{ observer, windowHours, minimumElevationDeg, passes[] }

GET/api/v0/live/events
Implemented

A year of dated astronomical events, each carrying the provenance of its date. `basis` is one of `computed` (derived here, with `method` naming the algorithm and version), `source-backed` (published by an authority, with `source` naming it), `forecast` (an annual recurrence, approximate to about a day) or `planned` (somebody's intention, with `source.lastVerifiedAt` giving the time it was last confirmed). `precision` says how much of the timestamp means anything — a launch scheduled to the quarter is not a timestamp to the minute — and `confirmed` is false for everything that can still move. Categories whose provider could not be reached are reported in `gaps` rather than silently omitted.

Returns

{ window, events: AstronomicalEvent[], gaps, providers }

GET/api/v0/live/events/eclipses
Implemented

Every solar and lunar eclipse of the twenty-first century, reproduced from NASA/GSFC's Five Millennium Catalog by Espenak and Meeus. The catalogue's instants are Terrestrial Dynamical Time; `greatestEclipseUtc` is that time less the catalogue's own `deltaTSeconds`, and both are returned so the arithmetic can be checked rather than trusted. These are the circumstances of GREATEST eclipse only — not local circumstances, which need the Besselian elements NASA publishes separately.

Returns

{ solar, lunar } — each an envelope around a CatalogueEclipse[]

GET/api/v0/live/events/launches
Implemented

The upcoming orbital launch schedule from Launch Library 2, maintained by The Space Devs — a community aggregation of operator and agency announcements, NOT a schedule published by any space agency. Every date is a No Earlier Than value that moves, often by weeks. `netPrecision` is the provider's own statement of how precisely the date is known, from the second down to the year, and `lastUpdated` is when the provider last confirmed the entry; both are passed through unchanged because without them a launch date cannot be used honestly.

Returns

LiveEnvelope<{ total, launches: UpcomingLaunch[] }>

Planned

Planned

Documented for transparency; intentionally absent from the OpenAPI spec until real.

POST/api/v0/graph/sparql
Planned

A SPARQL 1.1 query endpoint over the graph's RDF. Architecture-ready: the JSON-LD/RDF export is live at /data/graph.jsonld and loads into any triple store today; a hosted SPARQL service is not yet available. No live endpoint is advertised.

Returns

SPARQL results (planned)

POST/api/v0/graph/graphql
Planned

A GraphQL endpoint over the same typed graph. Architecture-ready: the schema maps onto the graph and the REST API delivers the same data today; the resolver layer is not yet served.

Returns

GraphQL results (planned)

POST/api/v1/contributions
Planned

Planned (v1, future). Would accept a structured proposal for review. NOT implemented: there is no write endpoint, no authentication, and no persistence in this program.

Returns

Accepted proposal receipt (not available)

GET/api/v0/relationships/{id}
Planned

Planned. Relationship ids (from|type|to) are not URL-safe as path segments; today, filter the list endpoint by from/to/type instead.

ParameterInTypeDescription
id*pathstringRelationship id (from|type|to).

Returns

Relationship

GET/api/v0/live-sky/{provider}/now
Planned

Planned. A generic per-provider observation endpoint. The connected space-weather providers are already served by the /api/v0/live/space-weather endpoints below, which return each product in its own honesty envelope; this generic form awaits the ephemeris and orbital providers.

ParameterInTypeDescription
provider*pathstringProvider key.

Returns

Live observation data (not available)