AI ビルダー向けのプロンプト
ビルダーはあなたより速くコードを書きます。ただし、特定の API について知らないことが 2 つあります。キーをどこに置くか、そしてブラウザからのリクエストがなぜ通らないかです。どちらもデバッグに何時間もかかりますが、どちらもプロンプトの 1 段落で解消できます。
以下、まずその段落、続いて 7 つのレシピです。
どのレシピよりも先に入れるべきルール
Section titled “どのレシピよりも先に入れるべきルール”このブロックを、レシピの本文の 前に ビルダーへコピーしてください。コードのスタイルの話ではなく、これがないと動かない、という話です。
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. ホイール付きの出生図
Section titled “1. ホイール付きの出生図”ユーザーの 1 回の操作に 2 つのレスポンス: チャートのデータと完成した SVG。
| エンドポイント | クレジット |
|---|---|
/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.生成後に確認すること: SVG が <img src> ではなくマークアップとして挿入されていること、時刻が HH:mm:ss の文字列で送られていること、キーがバンドルに入っていないこと (ビルド済みファイルを aw_ で検索して何も見つからないこと)。
2. 2 つのチャートの相性
Section titled “2. 2 つのチャートの相性”説明文なしで、1 つの数値とその内訳。/v1/synastry/attraction-score、1 組 50 クレジット。
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. キーをまったく使わない日次ホロスコープ
Section titled “3. キーをまったく使わない日次ホロスコープ”サーバーのルートが不要な唯一のレシピです。このエンドポイントはブラウザに応答し、クレジットもかかりません。
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
Section titled “4. Human Design”タイプ、ストラテジー、オーソリティ、プロファイル、センター、チャネルを /v1/human-design の 1 回の呼び出しで取得します。50 クレジット。
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 レポート
Section titled “5. ユーザーのブランドで出す PDF レポート”画面を見せるのではなく、レポートを販売する方向けです。/v1/reports/natal、1 文書 5000 クレジット で、リンクの有効期限は 24 時間です。
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.16 種類のレポートの完全なカタログ、それぞれの内容とページ数: Reports API。
6. 1 か月分のトランジットのカレンダー
Section titled “6. 1 か月分のトランジットのカレンダー”日付の範囲内のイベント一覧で、そこからフィードもカレンダーも作れます。/v1/transit-calendar、1 期間 100 クレジット。
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. タロットのスプレッド
Section titled “7. タロットのスプレッド”毎日のインタラクションを加える最も安い方法です。/v1/tarot/rider-waite/draw/three-card、1 スプレッド 10 クレジット、日替わりのカードならゼロです。
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.8 つのビルダー、違いは 1 つ
Section titled “8 つのビルダー、違いは 1 つ”上のレシピはどれにも共通です。違うのは、サーバーのルートをどこに置き、キーをどこに入れるかだけです。
| ビルダー | サーバー側の呼び出しを置く場所 | キーを入れる場所 |
|---|---|---|
| Lovable | Supabase の edge function | Supabase プロジェクトの Secrets |
| Bolt | server function | Bolt の Secrets パネル |
| v0 | Vercel Functions 上の Next.js の route handler | Vercel の環境変数、種類は Secret |
| Replit | 通常のサーバープロセス | Replit Secrets、さらに Deployments にも別途もう一度 |
| Cursor, Claude Code, Devin Desktop, Copilot | お使いのスタックにあるもの | git 管理外の .env とホスティングのシークレットストア |
それぞれ一晩を奪う、4 つの落とし穴。
- Lovable と Bolt はフロントエンドを Vite でビルドし、Vite は
VITE_プレフィックスの付いた変数をすべてブラウザに渡します。一時的であってもキーをそこに入れないでください。全員に配布されるバンドルに入ってしまいます。 - Bolt はプレビューを WebContainer 内で表示します。これは本物の CORS を持つ本物のブラウザで、そこでは CORS を無効にできません。ここでのサーバー関数は「より良い」選択ではなく、呼び出しを成立させる唯一の方法です。
- v0 は
NEXT_PUBLIC_*をビルド時にバンドルへ埋め込みます。 ダッシュボードで値を変えるだけでは不十分で、新しいデプロイがあるまでアプリは古いキーで動きます。キーのローテーションは、ローテーションと再ビルドのセットです。 - Replit はワークスペースのシークレットと Deployments のシークレットを別々に保持します。 エディターで動いていたものが、公開後に空のキーで失敗します。Deployments パネルでもう一度追加するまで直りません。
表の最後の 4 つはプラットフォームではなく、あなたのリポジトリで動くエージェントで、それぞれ自分のサンドボックス用のネットワーク許可リストを持っています。エージェントが書いたばかりのコードを試そうとすると、ドメインが追加されるまで api.astroway.info への呼び出しがブロックされることがあります。これらにはもっと短い道もあります。こちらの MCP を接続すれば、あなたのコードなしでエージェント自身が API を呼び出します。手順は エージェントの設定 にあります。
エージェントが MCP ではなく function calling を使う場合
Section titled “エージェントが MCP ではなく function calling を使う場合”既成のツール定義を取得して、そのままモデルに渡してください。定義は OpenAPI ドキュメントから生成されるため、モデルが埋めるスキーマはエンドポイントが検証するものと同じです。
curl "https://api.astroway.info/v1/agent/tools?format=openai&select=starter" \-H "X-Api-Key: aw_live_YOUR_KEY"format は openai と anthropic を受け付け、select はすべてのツールではなくスターターセットにカタログを絞り込みます。