AstroWay/api v2.204.2 · cs
všechny systémy jsou v pořádku

Reports V2: jeden endpoint místo dvanácti - `/v1/reports/generate`

Místo 12 type-specific routů /reports/natal, /reports/synastry, … - jeden unifikovaný endpoint POST /v1/reports/generate s polem report_type. SDK-consumenti získají jeden metod místo dvanácti; MCP-katalog se zkracuje z 12 nástrojů na jeden.

12 typů PDF‑reportů - natal, transit-yearly, synastry, business, career, love, money, child, lal-kitab, human-design, tarot, vedic-kundli - doposud žily jako 12 samostatných routů. Každý má svůj schéma, svůj chart-payload, svůj pricing tier. To je podle REST‑kanónu v pořádku, ale vytváří DX‑problém na dvou úrovních:

  1. SDK surface. TypeScript‑klient nese 12 metod client.reports.natal(), client.reports.synastry(), … Každý nový typ reportu = breaking change v public API SDK (menší verze s novou metodou).
  2. MCP‑katalog. Hosted MCP‑server exponuje 686 nástrojů: každý z 12 reportů zabírá samostatný tool entry. AI‑agent, který prochází MCP, musí prozkoumat 12 tool descriptions, aby vybral ten správný. To je šum v tool selection.

Nový endpoint POST /v1/reports/generate – jeden dispatcher s report_type enum.

Terminál
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 platných hodnot report_type: natal, transit-yearly, synastry, business, career, love, money, child, lal-kitab, human-design, tarot, vedic-kundli.

Různé typy vyžadují různá payload‑pole. Dispatcher provádí validaci v handleru a vrací typizovaný 400:

report_typePožadovaná poleKód chyby při chybějícím
natal, business, career, love, money, child, lal-kitab, human-design, vedic-kundli, transit-yearlychartMISSING_CHART
synastrychart1, chart2MISSING_CHARTS
tarot(volitelný) seed–

Takže report_type řídí nejen render‑route, ale i validační pravidla pro tělo požadavku.

Zpětná kompatibilita je úplná: všechny 12 type‑specific endpointy zůstávají živé. Nový /v1/reports/generate – additive surface, ne replacement. To znamená, že existující kód se nezlomí, ale nový kód může být psán kompaktněji:

// Стара модель - 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" });

Co je lepší – závisí na use‑case. Direct‑metoda dává lepší type narrowing (TS‑kompilátor ví, že client.reports.synastry.create() vyžaduje chart1 + chart2). Generic‑dispatcher poskytuje menší surface area pro dynamické use‑case’y – například když uživatel vybírá typ reportu přes UI dropdown a nechceš 12‑násobný switch v klientském kódu.

Na hosted MCP‑serveru (mcp.astroway.info) bylo 12 samostatných tools, každý s úplným popisem parametrů. Po přidání generate neodstraňujeme staré (zpětná kompatibilita) – ale nový tool astroway_reports_generate má jeden popis s report_type enum:

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

AI‑agent při získání úkolu „vygeneruj mi natal report pro datum X“ získá jednoho kandidáta s jasným descriptor, místo 12 kandidátů s překrývajícími se popisy. To zlepšuje tool selection accuracy na úrovni agenta.

Pricing: bez překvapení

Sekce “Pricing: bez překvapení”

Dispatcher nepřidává samostatnou cenu. Každý report_type je forwardován na svého interního renderera, který má svůj pricing tier:

  • natal → TIER_7
  • transit-yearly → TIER_8
  • synastry, business, career, love, money, child, lal-kitab, human-design, vedic-kundli → odpovídající tiery
  • tarot → TIER_4

Konkrétní credit‑čísla najdeš na stránce Cenová nabídka. Volání POST /v1/reports/generate s report_type: "natal" stojí přesně stejně jako přímé POST /v1/reports/natal.

Whitelabel inline funguje stejně

Sekce “Whitelabel inline funguje stejně”

Nový whitelabel: BrandingObject inline‑režim (vydaný 2026-05-19) funguje přes generic dispatcher bez změn:

Terminál
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"
}
}'

Jeden dispatch + jeden inline whitelabel = plnohodnotná white‑label integrace s minimálním SDK surface.

GenerateReport – samostatná komponenta v /v1/openapi.json. Používá oneOf s report_type discriminator, což poskytuje korektní codegen v Python (Pydantic) a PHP (typed unions přes psalm/phpstan‑style hints).

Příští codegen‑release SDK přidá metodu client.reports.generate() ve všech třech balíčcích (TS / Python / PHP). Do té doby můžeš volat přes generic HTTP‑klient ve svém SDK – payload je dokumentován v OpenAPI.

Kdy použít který styl

Sekce “Kdy použít který styl”
ScénářDoporučeno
Uživatel vybírá typ reportu z UI dropdowngenerate (dynamicky)
Backend ví přesně jeden typ na endpointudirect (natal, synastry, …) – lepší typování
Integrace přes MCP / AI‑agentgenerate (méně tool noise)
Existující kód na v1.0 SDKzanechat direct, migrovat postupně

Samostatná migrační urgentnost neexistuje – direct‑endpointy nejsou deprecated. Je to čistě DX‑vylepšení pro ty, kterým 12‑metodová surface vadí.

MakSeong · AstroWay

Dělám AstroWay API: zabaluju Swiss Ephemeris do čistého REST a píšu o nudných detailech, které jsou ve skutečnosti důležité.

// postav na tom

Stejný Swiss Ephemeris jako v Solar Fire - ve 4 řádcích kódu.

Zdarma klíč bez karty. 5 000 volání za měsíc do první platby.

Více z blogu všechny příspěvky →

Ephemeris 2026-07-19

Jak udržujeme přesnost pod kontrolou: CI proti swetest a NASA

Přesnost v astro-API snadno degraduje jeden refaktor ephemeridy. Rozdělíme ochranu: jedno jádro Swiss Ephemeris pro aplikaci i API, stovky zmražených snapshotů na referenčních mapách a triangulace každého PR proti swetest CGI, Kerykeion, Prokerala a katalogu zatmění NASA.

Engineering 2026-07-15

Tři oficiální SDK: TypeScript, Python, PHP místo surového curl

Surový HTTP funguje, ale typovaný klient šetří hodiny: automatické doplňování cest, typy požadavků a odpovědí, vestavěný retry na 408/409/429/5xx a hierarchie chyb ve stylu Stainless. Rozebíráme tři oficiální SDK - @astroway/sdk (npm), astroway (PyPI), astroway/sdk (Packagist) - a jak jsou generovány z jednoho OpenAPI kontraktu.

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.