The AstroWay TypeScript SDK is generated from the OpenAPI spec, so request bodies and responses are fully typed — your IDE autocompletes the fields and the compiler catches mistakes before runtime. Here’s a natal chart, then the same call inside a React component.
Install
Section titled “Install”npm install @astroway/sdk# or: pnpm add @astroway/sdkGet a key on the dashboard — 10,000 credits/month free, no card.
A typed natal chart
Section titled “A typed natal chart”import { Astroway } from '@astroway/sdk';
const aw = new Astroway({ apiKey: process.env.ASTROWAY_API_KEY! });
const chart = await aw.chart.compute({ date: '1990-07-14', time: '14:30:00', timezoneOffset: 3, latitude: 50.45, longitude: 30.52,});
// chart.planets is typed — not `any`for (const p of chart.planets) { console.log(`${p.name} ${p.longitude.toFixed(2)}° ${p.sign}`);}The { ok, data, error } envelope is unwrapped for you, so chart is the data.
Need a raw response or an endpoint without a typed namespace yet?
aw.client.POST('/chart', { body }) is the underlying typed fetch.
In a React component
Section titled “In a React component”No extra dependency needed — call the SDK from an effect (or a server action / route handler if you don’t want the key in the browser):
import { useEffect, useState } from 'react';import { Astroway } from '@astroway/sdk';
const aw = new Astroway({ apiKey: import.meta.env.VITE_ASTROWAY_KEY });
export function NatalChart({ birth }: { birth: { date: string; time: string; timezoneOffset: number; latitude: number; longitude: number;} }) { const [planets, setPlanets] = useState<{ name: string; sign: string }[]>([]);
useEffect(() => { aw.chart.compute(birth).then((c) => setPlanets(c.planets)); }, [birth]);
return ( <ul> {planets.map((p) => <li key={p.name}>{p.name} in {p.sign}</li>)} </ul> );}In production, keep the API key server-side: call aw.chart.compute from a Next
route handler or a small proxy and pass the result to the client. The SDK runs
the same in Node, edge runtimes and the browser.
Idempotency and errors
Section titled “Idempotency and errors”Mutating-style calls take an idempotency key so a retry can’t double-charge credits, and errors are a typed hierarchy:
import { RateLimitError, BadRequestError } from '@astroway/sdk';
try { await aw.synastry.aspectGrid(body, { idempotencyKey: 'replay-abc' });} catch (e) { if (e instanceof RateLimitError) {/* back off */} if (e instanceof BadRequestError) {/* show which field failed */}}SDK vs a local library
Section titled “SDK vs a local library”A browser-only ephemeris library ships hundreds of kilobytes of WASM + data to every visitor. The SDK keeps the calculation server-side over a typed HTTP call, so your bundle stays small and you also get 722 other endpoints (synastry, transits, Human Design, AI interpretations) without adding dependencies.
Next steps
Section titled “Next steps”- TypeScript SDK reference
- Natal chart API in Python — same API, Python
- Birth Chart API
- Pricing
El mismo Swiss Ephemeris que en Solar Fire — en 4 líneas de código.
Clave gratuita sin tarjeta. 5 000 llamadas al mes antes del primer pago.