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 (currently all 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 }

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. Requires a connected external provider; no provider is connected yet, so no live data is served. The provider registry above is real.

ParameterInTypeDescription
provider*pathstringProvider key.

Returns

Live observation data (not available)