Skip to content

Changelog

Two versions move independently. The API version (currently 0.1.0) tracks the HTTP contract — paths, schemas, status codes. The calc_version (currently 0.1.1) tracks numerical output: identical input plus identical calc_version returns identical digits. A calc_version bump means some digit somewhere may differ; an API version bump means the shape of requests or responses changed. Both are visible at runtime — calc_version in every response’s meta and in GET /health.

  • Speed values re-quantized for cross-architecture determinism. Internal quantization of body speeds moved from six decimal places to five (round6 → round5), eliminating a last-digit divergence between CPU architectures. As a result, served speed values (four decimals) may differ from calc_version 0.1.0 in the final decimal place. No other field is affected.
  • If you snapshot responses for regression testing, re-baseline speed values against 0.1.1. Longitudes, declinations, and all other outputs are unchanged.

Additive changes to the 0.1.0 contract — existing fields and behavior are unchanged.

  • Position objects gained three fields: element (fire/earth/air/water), modality (cardinal/fixed/mutable), and out_of_bounds (true when the body’s declination exceeds the true obliquity of date).
  • The requestable body set extended to 18 bodies, adding lilith_mean, ceres, pallas, juno, and vesta to the planets, nodes, and chiron.
  • Subjects are datetime-only in v1. subject.datetime (ISO 8601 with an explicit UTC offset) is the single authoritative time input. local_datetime and place-name geocoding are reserved for the timezone/geocoding release; a request carrying a place field is rejected as an unknown field (400) rather than silently ignored, so nothing sent today can change meaning later.

Initial public surface, in early access.

  • POST /v1/western/positions — planetary positions for a subject moment (1 credit per call). Requests take the shared subject and settings schemas used by every future computation endpoint.
  • GET /health and GET /ready — unauthenticated liveness and engine-readiness probes. /health reports the Swiss Ephemeris version and current calc_version.
  • Authentication — bearer API keys in a single header (Authorization: Bearer …), with environment-identifiable prefixes: ak_test_ and ak_live_.
  • Errors — RFC 9457 application/problem+json on every failure, with a stable namespaced code and a per-request request_id.
  • Response envelope — every success is data plus meta, where meta always carries provenance: calc_version, settings_resolved (full settings actually used, defaults included), subject_resolved (resolved UTC moment, offset, coordinates, time_known), and credits_charged.

API spec v0.1.0 · docs 0e4f5ec