Deterministic Western astrology computation, backed by the Swiss Ephemeris. Every response tells you exactly what was computed, with which settings, and what it cost.
The Astral Astrology API computes Western astrology data as pure functions over a birth moment. Send a subject (an ISO 8601 datetime with an explicit UTC offset, plus optional coordinates) and optional settings; get back structured positions computed against the Swiss Ephemeris (currently 2.10.03). The same input against the same calc_version returns the same digits, on every run, on every machine. That determinism is a contract, not an aspiration — it is versioned, tested in CI, and echoed in every response.
Provenance on every response
Every response carries meta.calc_version, meta.settings_resolved (the
full settings actually used, defaults included), meta.subject_resolved
(the exact UTC moment and coordinates computed), and
meta.credits_charged. Nothing is resolved silently.
Errors you can program against
Every error is an RFC 9457 problem document with a stable, namespaced
code — auth.missing, settings.ayanamsa.not_applicable — plus a
request_id for support. Domain edge cases are documented codes, not a
400 with a string.
One schema everywhere
One subject schema, one settings schema, one data/meta envelope.
Integrate one endpoint and you have integrated them all — no per-endpoint
parameter drift.
Both units, always
Every position ships decimal degrees and structured
degrees/minutes/seconds side by side, so you never write the conversion
— and never inherit its rounding bugs.
The API is in early access (Phase 0). The live surface is deliberately small:
Endpoint
Purpose
POST /v1/western/positions
Planetary positions for a subject moment (1 credit)
GET /health
Process liveness, engine and calc_version info (unauthenticated)
GET /ready
Engine readiness probe (unauthenticated)
Base URL: https://astral-external-api-iksoi6t3nq-ue.a.run.app. All examples in these docs use it, and CI executes them against it on every build — if an example is on this site, it ran and passed.
During early access, API keys are provisioned manually — there is no self-serve signup yet. Once you have a test key, export it and you are one request away from data: