Prompts für AI-Builder
Ein Builder schreibt Code schneller als du. Was er nicht weiß, sind zwei Dinge über eine konkrete API: wohin der Schlüssel gehört und warum eine Anfrage aus dem Browser nicht durchgeht. Beides kostet Stunden an Fehlersuche, und beides erledigt ein einziger Absatz im Prompt.
Unten zuerst dieser Absatz, dann sieben Rezepte.
Die Regel, die vor jedes Rezept gehört
Abschnitt betitelt „Die Regel, die vor jedes Rezept gehört“Kopiere diesen Block vor den Text des Rezepts in den Builder. Es geht nicht um Codestil, sondern um das, was sonst nicht funktioniert.
AstroWay API house rules. Apply these to every request you generate.
1. The API key is a server secret. Never put aw_live_* or aw_test_* into client code, into a VITE_* or NEXT_PUBLIC_* variable, or into a fetch that runs in the browser. Create a server route and call the API from there.2. The browser cannot call https://api.astroway.info/v1/* with that key. The one exception is a publishable pk_live_* key created for your app's origin: responses to that origin carry access-control-allow-origin, and the key works only from origins on its own list. Two prefixes answer any browser with no key: /v1/public/* returns JSON you can use, and /v1/embed/* returns a finished HTML page meant for an iframe, not for fetch.3. The auth header is exactly "X-Api-Key: <key>". Authorization: Bearer is rejected with 401, and so is an api_key query parameter.4. Send the birth time zone as an IANA name: "timezone": "Europe/Kyiv". Do not compute a UTC offset yourself. Kyiv in May 1990 was UTC+4, not the +3 it is today, and a wrong offset moves every house cusp.5. Every response is {"ok": true, "data": {...}} or {"ok": false, "error": {"code": "...", "message": "..."}}. Read data on success and show error.message to the user on failure. Do not assume a bare object.6. Planet positions arrive as ecliptic longitude in degrees, with no sign name. Derive it: SIGNS[Math.floor(longitude / 30)] where SIGNS runs Aries, Taurus, Gemini, Cancer, Leo, Virgo, Libra, Scorpio, Sagittarius, Capricorn, Aquarius, Pisces. Degrees inside the sign are longitude % 30.7. Responses carry X-Credits-Used and X-Credits-Remaining. Log both on the server so the cost of a feature is visible before the bill is.8. Ask for the fields you will render. Every endpoint takes ?fields= as a comma-separated list of dotted paths and ?precision= as decimal places: POST /v1/chart?fields=planets.name,planets.longitude,houses.cusp&precision=2 answers in 559 bytes where the full response is 32,410. Same credits, and the tokens are yours to pay either way.9. Get a free key at https://api.astroway.info/dashboard/sign-up and use an aw_test_* sandbox key while building: it spends no credits.1. Geburtshoroskop mit Rad
Abschnitt betitelt „1. Geburtshoroskop mit Rad“Zwei Antworten auf eine Aktion des Nutzers: die Daten des Horoskops und ein fertiges SVG.
| Endpunkt | Credits |
|---|---|
/v1/chart | 20 |
/v1/render/wheel-western | 10 |
Build a single-page app: a birth data form (date, time, city with latitude andlongitude, IANA time zone) that renders a natal chart.
Server route POST /api/chart does two calls to AstroWay, in parallel: POST https://api.astroway.info/v1/chart POST https://api.astroway.info/v1/render/wheel-westernBoth take the same body: { "date": "1990-05-15", "time": "14:30:00", "timezone": "Europe/Kyiv", "latitude": 50.45, "longitude": 30.52 }Both need the X-Api-Key header.
/v1/chart returns data.planets (array with name, longitude, isRetrograde),data.houses.cusps (array of 12 longitudes) and data.aspects (array withplanet1, planet2 and a type object carrying name, symbol and color)./v1/render/wheel-western returns data.svg as a string.
The page shows the SVG at the top, then a table of planets with sign anddegree derived from longitude, then the aspect list using type.symbol andtype.color. Mark retrograde planets with an R.
Do not call AstroWay from the browser. The page calls /api/chart only.Prüfe nach der Generierung: Das SVG ist als Markup eingefügt, nicht in <img src>; die Zeit wurde als String HH:mm:ss gesendet; der Schlüssel ist nicht im Bundle gelandet (eine Suche nach aw_ in den gebauten Dateien darf nichts finden).
2. Kompatibilität zweier Horoskope
Abschnitt betitelt „2. Kompatibilität zweier Horoskope“Eine Zahl und ihre Bestandteile, ohne erklärenden Text. /v1/synastry/attraction-score, 50 Credits pro Paar.
Build a compatibility page: two birth-data forms side by side, one button.
Server route POST /api/compat calls POST https://api.astroway.info/v1/synastry/attraction-scorewith body { "chart1": {...}, "chart2": {...} }, where each chart is { "date", "time", "timezone", "latitude", "longitude" }.
The response has data.score (a number), data.components (the parts that madeit) and data.notes. Render score as a large number with a progress ring, thencomponents as labelled bars, then notes as a list.
Never show the score without the components: a single number with no reasonbehind it is the thing users distrust.3. Tageshoroskop, ganz ohne Schlüssel
Abschnitt betitelt „3. Tageshoroskop, ganz ohne Schlüssel“Das einzige Rezept ohne Serverroute: Dieser Endpunkt antwortet dem Browser und kostet keine Credits.
Add a daily horoscope block to the page. Call this directly from the browser,no key and no server route needed:
GET https://api.astroway.info/v1/public/horoscope/daily?sign=leo&lang=en
Response: data.sign, data.date, data.period, data.horoscope (the text),data.disclaimer and data.language. Render a sign picker with the twelve signs,remember the choice in localStorage, and always show data.disclaimer under thetext.
The first request for a date that has not been generated yet can take a while,so show a skeleton, not a spinner that looks stuck.4. Human Design
Abschnitt betitelt „4. Human Design“Typ, Strategie, Autorität, Profil, Zentren und Kanäle mit einem Aufruf von /v1/human-design, 50 Credits.
Build a Human Design page: birth data form, then the chart summary.
Server route POST /api/hd calls POST https://api.astroway.info/v1/human-designwith { "date", "time", "timezone", "latitude", "longitude" }.
The response has data.type, data.strategy, data.notSelfTheme, data.authority,data.profile, data.definition, data.cross, data.centers, and the activationarrays data.personalityActivations and data.designActivations.
Lay it out as: type and strategy as the headline, authority and profile as twocards, centers as a list with defined ones filled and undefined ones outlined,activations in a collapsible table. Birth time matters here more than anywhereelse, so refuse to submit without it and say why.5. PDF-Bericht unter der Marke des Nutzers
Abschnitt betitelt „5. PDF-Bericht unter der Marke des Nutzers“Für alle, die Berichte verkaufen statt Bildschirme zu zeigen. /v1/reports/natal, 5000 Credits pro Dokument, und der Link gilt 24 Stunden.
Build a report generator: birth data form plus a branding form (company name,report title, accent colour), and a Generate button.
Server route POST /api/report calls POST https://api.astroway.info/v1/reports/natalwith { "chart": { "date", "time", "timezone", "latitude", "longitude" }, "whitelabel": { "companyName": "...", "reportName": "...", "themeColor": "#7c3aed", "footerText": "..." } }
The response has data.url, data.page_count, data.byte_length anddata.expires_at. The URL is valid for 24 hours only, so the server mustdownload the PDF immediately and store it on your side, then hand the useryour own link. Never give the AstroWay URL to the end user.
Show page_count and a download button. One report costs 5000 credits: put aconfirmation step before the call, not after.Der vollständige Katalog der sechzehn Berichte, was in jedem steht und wie viele Seiten er hat: Reports API.
6. Transitkalender für einen Monat
Abschnitt betitelt „6. Transitkalender für einen Monat“Eine Liste der Ereignisse in einem Datumsfenster, aus der sich sowohl ein Feed als auch ein Kalender ergibt. /v1/transit-calendar, 100 Credits pro Fenster.
Build a month view of transits.
Server route POST /api/transits calls POST https://api.astroway.info/v1/transit-calendarwith { "natal": { "date", "time", "timezone", "latitude", "longitude" }, "startDate": "2026-10-01", "endDate": "2026-10-31" }
The response has data.count and data.events, plus the echoed startDate,endDate and maxOrb. Render events on a month grid, one dot per day withevents, and a day panel listing that day's events.
One call covers the whole window, so fetch the month once and filter in theclient. Do not call the API per day: that is thirty-one calls and thirty-onetimes the credits for the same answer.7. Tarot-Legung
Abschnitt betitelt „7. Tarot-Legung“Der günstigste Weg, eine tägliche Interaktion hinzuzufügen. /v1/tarot/rider-waite/draw/three-card, 10 Credits pro Legung, oder null für die Tageskarte.
Add a three-card tarot spread.
Server route POST /api/tarot calls POST https://api.astroway.info/v1/tarot/rider-waite/draw/three-cardwith an optional { "seed": 7 }. The response has data.spread, data.seed anddata.drawn.
Pass a seed derived from the user id and today's date, so the same person getsthe same spread all day and a new one tomorrow. Without a seed every reloaddeals a new hand, which reads as a slot machine.
For a zero-cost daily card the browser can call GET https://api.astroway.info/v1/public/tarot/dailydirectly, no key.Acht Builder, ein Unterschied
Abschnitt betitelt „Acht Builder, ein Unterschied“Die Rezepte oben sind für alle gleich. Der Unterschied liegt nur darin, wo die Serverroute lebt und wohin der Schlüssel gehört.
| Builder | Wo der Serveraufruf lebt | Wohin der Schlüssel gehört |
|---|---|---|
| Lovable | Edge Function in Supabase | Secrets des Supabase-Projekts |
| Bolt | Server Function | Secrets-Panel in Bolt |
| v0 | Route Handler von Next.js auf Vercel Functions | Environment Variable in Vercel, vom Typ Secret |
| Replit | gewöhnlicher Serverprozess | Replit Secrets, und separat noch einmal in Deployments |
| Cursor, Claude Code, Devin Desktop, Copilot | der in deinem Stack | .env außerhalb von git plus der Secret-Speicher deines Hostings |
Vier eigene Fallen, jede kostet einen Abend.
- Lovable und Bolt bauen das Frontend mit Vite, und Vite gibt dem Browser jede Variable mit dem Präfix
VITE_mit. Der Schlüssel kommt dort nicht einmal vorübergehend hinein: Er landet im Bundle, das an alle ausgeliefert wird. - Bolt zeigt die Vorschau in einem WebContainer, und das ist ein echter Browser mit echtem CORS, das sich dort nicht abschalten lässt. Die Server Function ist hier nicht “besser”, sondern der einzige Weg, damit der Aufruf überhaupt stattfindet.
- v0 backt
NEXT_PUBLIC_*beim Build ins Bundle ein. Den Wert im Dashboard zu ändern reicht nicht: Solange es kein neues Deployment gibt, läuft die App mit dem alten Schlüssel. Schlüsselrotation heißt Rotation plus Neubau. - Replit hält die Secrets des Workspace und die Secrets von Deployments getrennt. Was im Editor funktioniert hat, scheitert nach der Veröffentlichung mit einem leeren Schlüssel, bis du ihn im Deployments-Panel noch einmal hinzufügen.
Die letzten vier Zeilen der Tabelle sind keine Plattformen, sondern Agenten in deinem Repository, und jeder hat eine eigene Netzwerk-Allowlist für seine Sandbox. Wenn der Agent gerade geschriebenen Code prüfen will, kann ein Aufruf an api.astroway.info blockiert sein, bis die Domain hinzugefügt ist. Für sie gibt es auch einen kürzeren Weg: Verbinde unseren MCP, und der Agent ruft die API selbst auf, ohne deinen Code. Anleitungen unter Agent einrichten.
Wenn dein Agent Function Calling spricht und nicht MCP
Abschnitt betitelt „Wenn dein Agent Function Calling spricht und nicht MCP“Nimm fertige Tool-Definitionen und gib sie direkt an das Modell weiter. Sie werden aus dem OpenAPI-Dokument erzeugt, das Schema, das das Modell ausfüllt, ist also dasselbe, das der Endpunkt prüft.
curl "https://api.astroway.info/v1/agent/tools?format=openai&select=starter" \-H "X-Api-Key: aw_live_YOUR_KEY"format akzeptiert openai und anthropic, select grenzt den Katalog auf das Startset statt aller Tools ein.