AstroWay/api v2.204.2 · id
semua sistem normal

Reports V2: satu endpoint alih-alih dua belas - `/v1/reports/generate`

Alih-alih 12 route type-specific /reports/natal, /reports/synastry, … - satu endpoint terintegrasi POST /v1/reports/generate dengan field report_type. Konsumen SDK mendapatkan satu metode alih-alih dua belas; katalog MCP dipersingkat dari 12 alat menjadi satu.

12 tipe laporan PDF - natal, transit-yearly, synastry, business, career, love, money, child, lal-kitab, human-design, tarot, vedic-kundli - sampai baru-baru ini hidup sebagai 12 route terpisah. Setiap memiliki skema sendiri, chart-payload sendiri, tier harga sendiri. Ini memang sesuai dengan kanon REST, tapi menciptakan masalah DX pada dua level:

  1. SDK surface. Klien TypeScript membawa 12 metode client.reports.natal(), client.reports.synastry(), … Setiap tipe laporan baru = breaking change pada public API SDK (versi minor dengan metode baru).
  2. MCP-katalog. Server MCP yang di-host mengekspose 686 alat: setiap dari 12 laporan mengambil entri tool terpisah. Agen AI yang berjalan melalui MCP harus memindai 12 deskripsi tool untuk memilih yang tepat. Ini menimbulkan kebisingan dalam pemilihan tool.

Endpoint baru POST /v1/reports/generate - satu dispatcher dengan enum report_type.

Terminal window
curl -X POST https://api.astroway.info/v1/reports/generate \
-H "X-Api-Key: aw_live_..." \
-H "Content-Type: application/json" \
-d '{
"report_type": "natal",
"chart": {
"date": "1990-05-15",
"time": "14:30:00",
"timezoneOffset": 3,
"latitude": 50.45,
"longitude": 30.52,
"name": "Test"
},
"language": "uk",
"whitelabel": {
"themeColor": "#ff5500",
"reportName": "My Cosmic Map"
}
}'

12 nilai valid report_type: natal, transit-yearly, synastry, business, career, love, money, child, lal-kitab, human-design, tarot, vedic-kundli.

Berbagai tipe membutuhkan bidang payload yang berbeda. Dispatcher melakukan validasi di handler dan mengembalikan 400 yang ter-typed:

report_typeBidang wajibKode error untuk yang hilang
natal, business, career, love, money, child, lal-kitab, human-design, vedic-kundli, transit-yearlychartMISSING_CHART
synastrychart1, chart2MISSING_CHARTS
tarot(opsional) seed–

Jadi report_type mengatur tidak hanya route render, tetapi juga aturan validasi pada body permintaan.

Kompatibilitas mundur penuh: semua 12 endpoint tipe-spesifik tetap hidup. /v1/reports/generate baru - additive surface, bukan pengganti. Ini berarti kode yang ada tidak akan rusak, tetapi kode baru dapat ditulis lebih ringkas:

// Стара модель - direct method per type
const pdf1 = await client.reports.natal.create({ chart, whitelabel });
const pdf2 = await client.reports.synastry.create({ chart1, chart2 });
const pdf3 = await client.reports.tarot.create({ seed: "abc" });
// V2 - generic dispatcher
const pdf1 = await client.reports.generate({ report_type: "natal", chart, whitelabel });
const pdf2 = await client.reports.generate({ report_type: "synastry", chart1, chart2 });
const pdf3 = await client.reports.generate({ report_type: "tarot", seed: "abc" });

Mana yang lebih baik - tergantung pada use-case. Metode Direct memberikan type narrowing yang lebih baik (kompiler TS tahu bahwa client.reports.synastry.create() membutuhkan chart1 + chart2). Generic-dispatcher memberikan surface area yang lebih kecil untuk use-case dinamis - misalnya, ketika pengguna memilih tipe laporan melalui dropdown UI dan kamu tidak ingin switch 12 kali di kode klien.

Di server MCP yang di-host (mcp.astroway.info) ada 12 tool terpisah, masing-masing dengan deskripsi parameter lengkap. Setelah menambahkan generate kami tidak menghapus yang lama (kompatibilitas mundur) - tetapi tool baru astroway_reports_generate memiliki satu deskripsi dengan enum report_type:

Tool: astroway_reports_generate
Description: Generates a PDF/HTML astrology report. Pass report_type to select template.
Parameters:
report_type (enum): "natal" | "transit-yearly" | "synastry" | "business" | ...
chart (object, required for most types): birth chart data
chart1, chart2 (objects, required for synastry)
language (string): "uk" | "en" | ...
whitelabel (boolean | object): branding override

Agen AI saat menerima tugas “generate laporan natal untuk tanggal X” mendapatkan satu kandidat dengan deskripsi yang jelas, alih-alih 12 kandidat dengan deskripsi yang tumpang tindih. Ini meningkatkan akurasi pemilihan tool pada level agen.

Dispatcher tidak menambahkan biaya terpisah. Setiap report_type diteruskan ke renderer internalnya masing-masing, yang memiliki tier harga sendiri:

  • natal → TIER_7
  • transit-yearly → TIER_8
  • synastry, business, career, love, money, child, lal-kitab, human-design, vedic-kundli → tier yang sesuai
  • tarot → TIER_4

Lihat angka credit spesifik di halaman Pricing. Panggilan POST /v1/reports/generate dengan report_type: "natal" biaya persis sama dengan POST /v1/reports/natal langsung.

whitelabel: BrandingObject mode inline baru (dirilis pada 2026-05-19) bekerja melalui generic dispatcher tanpa perubahan:

Terminal window
curl -X POST https://api.astroway.info/v1/reports/generate \
-H "X-Api-Key: aw_live_..." \
-H "Content-Type: application/json" \
-d '{
"report_type": "synastry",
"chart1": { ... },
"chart2": { ... },
"whitelabel": {
"companyName": "Acme Astrology",
"logoUrl": "https://cdn.example.com/logo.png",
"themeColor": "#ff5500"
}
}'

Satu dispatch + satu inline whitelabel = integrasi white-label lengkap dengan surface SDK minimal.

GenerateReport - komponen terpisah di /v1/openapi.json. Ia menggunakan oneOf dengan discriminator report_type, yang memberikan codegen yang tepat di Python (Pydantic) dan PHP (typed unions melalui petunjuk psalm/phpstan-style).

Rilis codegen SDK berikutnya akan menambahkan metode client.reports.generate() di ketiga paket (TS / Python / PHP). Sampai saat itu kamu dapat memanggil melalui generic HTTP client di SDK-mu - payload didokumentasikan di OpenAPI.

SkenarioRecommended
Pengguna memilih tipe laporan dari dropdown UIgenerate (dinamis)
Backend tahu tepat satu tipe pada endpointdirect (natal, synastry, …) - tipe yang lebih baik
Integrasi melalui MCP / agen AIgenerate (kurangi noise tool)
Kode yang ada pada SDK v1.0tetap gunakan direct, migrasi secara bertahap

Tidak ada urgensi migrasi khusus - endpoint direct tidak deprecated. Ini hanyalah perbaikan DX bagi mereka yang terganggu oleh surface dengan 12 metode.

MakSeong · AstroWay

Aku membuat AstroWay API: membungkus Swiss Ephemeris ke dalam REST murni dan menulis tentang detail membosankan yang sebenarnya penting.

// bangun di atas ini

Swiss Ephemeris yang sama dengan Solar Fire - dalam 4 baris kode.

Kunci gratis tanpa kartu. 5.000 panggilan per bulan sebelum pembayaran pertama.

Lebih dari blog semua tulisan →

Ephemeris 2026-07-19

Bagaimana Kami Mengawasi Akurasi: CI vs swetest dan NASA

Akurasi dalam API Astro dapat menurun dengan mudah dari satu refaktor ephemeris. Kami memecahkan perlindungan: satu inti Swiss Ephemeris untuk aplikasi dan API, ratusan snapshot beku pada peta standar dan triangulasi setiap PR terhadap swetest CGI, Kerykeion, Prokerala, dan katalog kegelapan NASA.

Engineering 2026-07-15

Tiga resmi SDK: TypeScript, Python, PHP alih-alih curl mentah

HTTP mentah bekerja, tetapi klien yang terjenis menghemat jam: otomatis melengkapi jalur, jenis permintaan dan respons, retry bawaan untuk 408/409/429/5xx dan hierarki kesalahan Stainless-style. Kami jelaskan tiga resmi SDK - @astroway/sdk (npm), astroway (PyPI), astroway/sdk (Packagist) - dan bagaimana mereka dihasilkan dari satu kontrak OpenAPI.

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.