AstroWay/api v2.295.7 · de
alle Systeme in Ordnung

So bauen Sie eine Astrologie-App: ein umfassender Leitfaden für Entwickler

Schritt-für-Schritt-Anleitung zur Erstellung einer Astrologie-App von Grund auf - Auswahl der API, Architektur, erstes Geburtshoroskop, Hinzufügen von Synastrien und Transiten, Deployment.

🕓 Eintrag vom 2026-04-14, aktualisiert am 2026-05-09. TS / Python / PHP SDK leben jetzt in öffentlichen Registries - @astroway/sdk (npm), astroway (PyPI), astroway/sdk (Packagist). Details im changelog.

Willst du eine astrologische Anwendung bauen. Wo fängst du an? In diesem Guide – Lösung und Code: von der Auswahl des API bis zum Deployment eines funktionierenden Produkts.

Bevor du Code schreibst, entscheide: Berechnungen im Client oder auf dem Server?

Client (zum Beispiel Swiss Ephemeris WASM im Browser):

  • Vorteile: keine Kosten pro Anfrage, funktioniert offline, volle Kontrolle
  • Nachteile: ~2 MB WASM pro Nutzer, komplexe Lizenzierung (kommerzielle Nutzung von Swiss Ephemeris hat Einschränkungen), du betreust den Berechnungscode selbst

Server‑API (AstroWay, Prokerala usw.):

  • Vorteile: keine clientseitigen Abhängigkeiten, kleiner Bundle der Anwendung, schnell auf Mobilgeräten, ohne Lizenzprobleme
  • Nachteile: Kosten in Credits pro Anfrage, Latenz bei “cold” Anfragen

Für die meisten Anwendungen gewinnt die Server‑API. Mobile Nutzer werden nicht 2 MB WASM warten; Lizenznuancen willst du nicht behandeln; und moderne APIs cachen identische Anfragen kostenlos (AstroWay macht einen 5‑Minuten‑Cache mit dem Header X-Cache: HIT).

Was zählt:

  • Genauigkeit: suche Swiss Ephemeris “unter der Haube” (±1 Bogensekunde). Wenn das API das nicht ausdrücklich sagt – frag nach.
  • Abdeckung: Natal + Synastrie + Transite: Minimum. Progressionen und Rückläufe – das nächste Level. Seltene Techniken (Rectification, Human Design) – das Differenzierungsmerkmal.
  • SDK‑Qualität: typisierte TypeScript‑ und Python‑SDKs sparen Stunden.
  • Preismodell: credit‑based skaliert besser als per‑request bei gemischter Last.

Für dieses Tutorial nehmen wir das AstroWay API, weil es alle vier hat (777 Endpunkte, Swiss Ephemeris, typisierte SDKs, credit‑based).

Rufe das astrologische API niemals direkt aus dem Browser auf – dein API‑Key würde lecken. Immer über dein Backend gehen.

Terminal-Fenster
mkdir my-astrology-app
cd my-astrology-app
npm init -y
npm install express @astroway/sdk zod
npm install -D typescript @types/express @types/node tsx

Erstelle src/server.ts:

import express from 'express';
import { Astroway } from '@astroway/sdk';
import { z } from 'zod';
const app = express();
app.use(express.json());
const client = new Astroway({
apiKey: process.env.ASTROWAY_API_KEY!,
});
const BirthInput = z.object({
date: z.string(),
time: z.string(),
timezoneOffset: z.number(),
latitude: z.number(),
longitude: z.number(),
});
app.post('/api/chart', async (req, res) => {
const parsed = BirthInput.safeParse(req.body);
if (!parsed.success) return res.status(400).json({ error: parsed.error });
try {
const chart = await client.chart.compute({
...parsed.data,
houseSystem: 'P',
});
res.json(chart);
} catch (err) {
res.status(500).json({ error: String(err) });
}
});
app.listen(3000, () => console.log('http://localhost:3000'));

Starte:

Terminal-Fenster
ASTROWAY_API_KEY=aw_test_... npx tsx src/server.ts

Überprüfung mit curl:

Terminal-Fenster
curl -X POST http://localhost:3000/api/chart \
-H "Content-Type: application/json" \
-d '{"date":"1990-07-14","time":"14:30:00","timezoneOffset":3,"latitude":50.4501,"longitude":30.5234}'

Du erhältst die vollständige JSON‑Natalkarte.

Jedes Framework passt. Zum Beispiel – React mit einem einfachen Formular:

import { useState } from 'react';
type Chart = {
planets: { name: string; longitude: number; isRetrograde: boolean }[];
aspects: { planet1: string; planet2: string; type: { name: string }; orb: number }[];
};
// Planets come with ecliptic longitude, not a sign: the sign is that longitude
// divided by 30. Work it out on your side, it is cheaper than another call.
const SIGNS = ['Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo',
'Libra', 'Scorpio', 'Sagittarius', 'Capricorn', 'Aquarius', 'Pisces'];
const signOf = (longitude: number) => SIGNS[Math.floor(longitude / 30) % 12];
export function NatalForm() {
const [chart, setChart] = useState<Chart | null>(null);
async function handleSubmit(formData: FormData) {
const body = Object.fromEntries(formData.entries());
const res = await fetch('/api/chart', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
date: body.date,
time: body.time + ':00',
timezoneOffset: Number(body.tz),
latitude: Number(body.lat),
longitude: Number(body.lng),
}),
});
setChart(await res.json());
}
return (
<div>
<form action={handleSubmit}>
<input name="date" type="date" required />
<input name="time" type="time" required />
<input name="tz" type="number" placeholder="Timezone offset (e.g. 3)" required />
<input name="lat" type="number" step="0.0001" placeholder="Latitude" required />
<input name="lng" type="number" step="0.0001" placeholder="Longitude" required />
<button>Build chart</button>
</form>
{chart && (
<div>
<h2>Planets</h2>
<ul>
{chart.planets.map(p => (
<li key={p.name}>{p.name}: {signOf(p.longitude)} {(p.longitude % 30).toFixed(2)}°{p.isRetrograde ? ' R' : ''}</li>
))}
</ul>
<h2>Aspects</h2>
<ul>
{chart.aspects.map((a, i) => (
<li key={i}>{a.planet1} {a.type.name} {a.planet2} (orb {a.orb.toFixed(2)}°)</li>
))}
</ul>
</div>
)}
</div>
);
}

Kompatibilität – das nächste offensichtliche Feature. Füge zu src/server.ts hinzu:

const SynastryInput = z.object({
chart1: BirthInput,
chart2: BirthInput,
});
app.post('/api/synastry', async (req, res) => {
const parsed = SynastryInput.safeParse(req.body);
if (!parsed.success) return res.status(400).json({ error: parsed.error });
const result = await client.synastry.compute(parsed.data);
res.json({
score: result.compatibility.score,
label: result.compatibility.label,
aspects: result.crossAspects,
});
});

Fertig. Ein Endpunkt, 50 Credits pro Aufruf, gibt einen Score von 0–100 und Cross‑Aspects zurück.

Für Content‑Engagement sind tägliche Horoskope ein Must‑have. AstroWay generiert sie aus echten Transit‑Daten:

// The daily horoscope is keyed by sign and date, not by the birth chart.
const DailyInput = z.object({
sign: z.enum(['aries', 'taurus', 'gemini', 'cancer', 'leo', 'virgo',
'libra', 'scorpio', 'sagittarius', 'capricorn', 'aquarius', 'pisces']),
date: z.string(),
});
app.post('/api/horoscope/daily', async (req, res) => {
const parsed = DailyInput.safeParse(req.body);
if (!parsed.success) return res.status(400).json({ error: parsed.error });
const horoscope = await client.horoscope.daily({ ...parsed.data, language: 'uk' });
res.json({
text: horoscope.horoscope,
disclaimer: horoscope.disclaimer, // must be shown in the UI!
});
});

Wichtig: KI‑generierter Content enthält einen Disclaimer, den du den Nutzern zeigen musst (gemäß Terms of Service). Entferne ihn nicht.

Tägliche Horoskope sind für alle Nutzer mit demselben Geburtstag und ähnlichen Natalcharts identisch. Cache aggressiv:

import { LRUCache } from 'lru-cache';
const cache = new LRUCache<string, any>({ max: 1000, ttl: 86400 * 1000 });
app.post('/api/horoscope/daily', async (req, res) => {
const key = JSON.stringify(req.body);
const cached = cache.get(key);
if (cached) return res.json(cached);
const horoscope = await client.horoscope.daily(req.body);
cache.set(key, horoscope);
res.json(horoscope);
});

AstroWay hat auch ein eingebautes 5‑Minuten‑Server‑Caching (X-Cache: HIT), aber für langlebigen Content brauchst du eigenen Cache.

Jede Plattform passt. Für einen schnellen Start – Vercel oder Railway:

Terminal-Fenster
# vercel.json
{ "functions": { "src/server.ts": { "runtime": "@vercel/node" } } }

Im Plattform‑Dashboard setze die env ASTROWAY_API_KEY.

Wenn du das hier erreicht hast – schätze den monatlichen Credit‑Verbrauch vor dem Launch:

credits/month = DAU × (avg_charts_per_user × 20
+ avg_synastries × 50
+ avg_horoscopes × 20) × 30

Für 100 DAU mit 1 Karte + 1 Horoskop + 0,3 Synastrien pro Nutzer pro Tag:

100 × (20 + 20 + 0.3 × 50) × 30 = 165,000 credits/month

Das ist der Starter‑Plan für $19/Monat (200K Credits).

Erweiterte Features, die du mit dem Wachstum hinzufügen solltest:

  • Transit‑Overlay: /v1/transits zeigt die aktuellen Positionen der Planeten auf der Natalkarte
  • Progressionen: /v1/progressions für Bögen der psychologischen Entwicklung
  • Solar Return: /v1/solar-return für die “Jahresprognose zum Geburtstag”
  • Human Design: Human Design API eröffnet ein völlig neues funktionales Gebiet
  • Astrokartografie: /v1/acg mappt, wo der Nutzer wohnen sollte

Jedes Feature ist von Grund auf schwer zu implementieren, aber – ein API‑Aufruf mit AstroWay reicht.

MakSeong · AstroWay

Ich entwickle das AstroWay API: packe Swiss Ephemeris in reines REST und schreibe über langweilige Details, die eigentlich wichtig sind.

// darauf aufbauen

Derselbe Swiss Ephemeris wie in Solar Fire - in 4 Zeilen Code.

Kostenloser Schlüssel ohne Kreditkarte. 5.000 Aufrufe pro Monat vor der ersten Zahlung.

Mehr aus dem Blog alle Beiträge →

Ephemeris 2026-07-19

Wie wir die Genauigkeit unter Kontrolle halten: CI gegen swetest und NASA

In einer Astrologie-API verschlechtert sich die Genauigkeit leicht durch ein einziges Refactoring der Ephemeriden. Wir zeigen unseren Schutz: ein Swiss-Ephemeris-Kern für App und API, Hunderte eingefrorene Snapshots auf Referenzhoroskopen und die Triangulation jedes PR gegen swetest CGI, Kerykeion, Prokerala und den Finsterniskatalog der NASA.

Engineering 2026-07-15

Drei offizielle SDKs: TypeScript, Python, PHP statt rohem curl

Rohes HTTP funktioniert, aber ein typisierter Client spart Stunden: Autovervollständigung der Pfade, Request- und Response-Typen, eingebauter Retry bei 408/409/429/5xx und eine Fehlerhierarchie im Stainless-Stil. Wir gehen die drei offiziellen SDKs durch, @astroway/sdk (npm), astroway (PyPI), astroway/sdk (Packagist), und zeigen, wie sie aus einem einzigen OpenAPI-Vertrag generiert werden.

Industry 2026-06-05

Free Astrology API: Which One Has the Best Free Tier in 2026?

A side-by-side of free tiers across the major astrology APIs - credits, request caps, card requirements - and how much you can actually build for free.