AstroWay/api v2.325.2 · changelog
усі системи в нормі

// product · release notes

Changelog що нового

Лише зміни, що впливають на код інтегратора: нові ендпоінти, оновлення SDK, зміни в /openapi.json, правки цін у кредитах, deprecation, breaking changes. Найновіші згори. Внутрішні правки сайту сюди не потрапляють.

Latest · v2.325.2 Endpoints · 865 CI tests · 888 API contract · v1 stable · 12-mo deprecation

2026-07-10 · POST /v1/aspects, окремий ендпоінт для аспектів

Новий ендпоінт для одного лише розрахунку аспектів - без planets / houses / midpoints payload-у /chart. Tier 1: 10 кредитів за виклик.

Terminal window
curl -X POST https://api.astroway.info/v1/aspects \
-H "X-Api-Key: aw_live_..." \
-H "Content-Type: application/json" \
-d '{"date":"1926-06-01","time":"09:30:00","timezoneOffset":-8,"latitude":34.05,"longitude":-118.24}'

Повертає count + aspects[] де кожен аспект має planet1 / planet2 / type (object з name, angle, orb, symbol, isMajor, i18nKey, color) / exactAngle / orb / isApplying.

Per-pair орб-матриця як у astro.com (правило MIN з двох планет). Та сама calcAspects() що використовує /chart - числа ідентичні subtree /chart.aspects.

2026-07-03 · POST /v1/houses, окремий ендпоінт для будинків

Новий ендпоінт для одного лише розрахунку домів - без planets / aspects / midpoints / etc payload-у /chart. Tier 1: 10 кредитів за виклик.

Terminal window
curl -X POST https://api.astroway.info/v1/houses \
-H "X-Api-Key: aw_live_..." \
-H "Content-Type: application/json" \
-d '{"date":"1990-05-15","time":"14:30:00","timezoneOffset":3,"latitude":50.45,"longitude":30.52,"houseSystem":"P"}'

Повертає houses.cusps (12 longitudes) + ascendant + mc + armc + vertex + equatorialAsc + опціональні coAscWK / coAscMunkasey / polarAsc + warning якщо запитана quadrant-система впала на extreme latitude і куспіди підставлено як Porphyry (|lat|>66.5°).

Підтримка houseSystem: P (Placidus, default) / K (Koch) / R (Regiomontanus) / C (Campanus) / T (Topocentric) / M (Morinus) / W (Whole Sign) / E (Equal) / O (Porphyry) - та решта стандартних однолітерних кодів.

Раніше за окремими cusps потрібно було робити POST /v1/chart (важчий payload). Тепер є legacy-compatible альтернатива для callers які хочуть лише дома без додаткового computed weight.

2026-06-26 · Onboarding wizard: AI endpoint discovery + sandbox first call

POST /v1/me/recommend-endpoints приймає текстовий опис use case, повертає top-5 endpoints з прикладами коду на curl/JS/Python.

Terminal window
curl -X POST https://api.astroway.info/v1/me/recommend-endpoints \
-H "Authorization: Bearer <jwt>" \
-H "Content-Type: application/json" \
-d '{"description":"Dating app with compatibility scores"}'
# {
# "detected_use_case": "relationship-compatibility",
# "recommendations": [
# { "endpoint": "/v1/synastry", "title": "Couple synastry",
# "why": "Returns aspects between two charts", "credits_per_call": 50,
# "code_example": { "language": "curl", "snippet": "..." } },
# ...
# ]
# }

Powered by LLM gateway. Маршрут use case → endpoints живе як prompt у ai.astroway.info - оновлюється без redeploy API.

Dashboard integration. Step 3 в /dashboard/onboarding wizard тригерить цей endpoint. Same endpoint доступний як standalone /dashboard/discover для existing users.

2026-06-23 · API локалізації контенту: /v1/translate/*

Астро-орієнтований машинний переклад на 20 мов. Чотири ендпоінти:

  • POST /v1/translate/astro: один текст (до 3000 символів)
  • POST /v1/translate/batch: до 25 рядків зі спільною цільовою мовою
  • GET /v1/translate/languages: список підтримуваних мов (безкоштовно)
  • GET /v1/translate/glossary/{lang}: вивантаження доменного глосарія (безкоштовно)

Доменний глосарій зберігає спеціальні терміни (Dasha, Nakshatra, асцендент, …) - вони не калічаться буквальним перекладом. Числові поля не торкаються. Джерело за замовчуванням англійська; передайте source_lang для іншого.

Кредити: 15 + ⌈символи/40⌉ за виклик (батч - за сумою символів). Списується з кредитів вашого тарифу. Ліміти: astro ≤3000 симв; batch ≤25 рядків, ≤2000 симв/рядок, ≤20000 разом.

2026-06-19 · POST /v1/moon-phase, фаза Місяця на момент часу

Новий ендпоінт: поточна фаза Місяця для довільної дати/часу/локації. Tier 1: 10 кредитів за виклик.

Terminal window
curl -X POST https://api.astroway.info/v1/moon-phase \
-H "X-Api-Key: aw_live_..." \
-H "Content-Type: application/json" \
-d '{"date":"2024-01-25","time":"12:00:00","latitude":0,"longitude":0,"timezoneOffset":0}'

Повертає phase (0..1), phaseName (New Moon / Waxing Crescent / First Quarter / Waxing Gibbous / Full Moon / Waning Gibbous / Last Quarter / Waning Crescent), majorPhase (new_moon / quarter / full_moon / between), illuminationPercent, elongationDeg, ageDays (синодичний вік 0..29.53), waxing, moonSign, sunSign, moonLongitude, sunLongitude.

Геоцентрична Sun-Moon елонгація за Meeus Ch.48 - алгоритмічно еквівалентно RapidAPI Astrologer /moon-phase/context. Раніше радили POST /v1/render/moon-phase із format: json як обхідний шлях - він повертає той самий розрахунок поряд із SVG; новий /moon-phase віддає чисто розрахунок без SVG-payload (легший, дешевший на network).

2026-06-17 · Виправлено схеми відповідей (/openapi.json) + nullable-поля

Повний аудит схем виявив ~19 ендпоінтів, де опублікована схема 200-відповіді розходилася з фактичним виводом - наприклад, у /chart поле aspects[].type було описане як рядок, а повертається об’єкт; так само координати ACG, поля Human Design (/human-design, /hd/*), Vedic (/vedic-divisional, /vedic/lal-kitab/*), /almuten, /sabian-symbols, /midpoint-trees та ін. Через це MCP-клієнти відхиляли виклики цих інструментів з помилкою -32602 Output validation error, а SDK зі строгою типізацією могли падати на розборі. Усі схеми приведено у відповідність до реального виводу.

Додатково: поля у виведених схемах тепер позначені як nullable. Реальні відповіді повертають null для умовних полів, а строга валідація раніше це відхиляла - тепер null приймається коректно.

Розрахунки не змінювалися - виправлено лише опис схем. Якщо ви генерували типи зі старого /openapi.json, перегенеруйте їх. Користувачі MCP (@astroway/mcp та hosted) отримають виправлення автоматично.

2026-06-15 · Вартість стрімінгу та вебхуків у кредитах

Уточнено тарифікацію стрім- і вебхук-ендпоінтів. /stream/* (10 ендпоінтів) тарифікуються як Tier 1: 10 кредитів за виклик (окремої “дешевшої” ставки за тік немає). CRUD-операції /webhooks/* - теж Tier 1; сама доставка події на ваш URL не тарифікується.

Що зробити: якщо опитуєте стрім-ендпоінт у циклі - рахуйте бюджет як 10 кредитів × частота й використовуйте поля tickSeconds / nextEventAt з відповіді, щоб не опитувати частіше, ніж змінюється стан. Деталі - Кредити та ліміти.

2026-06-13 · API-відповіді у 20 мовах через Accept-Language

Усі ендпоінти, що повертають текстовий контент, тепер реагують на заголовок Accept-Language. Прикладом, Accept-Language: hi для /v1/horoscope/daily поверне гороскоп гінді; Accept-Language: de для /v1/interpret/planet-in-sign - німецьку інтерпретацію.

Підтримувані мови: uk · en · de · pl · es · pt · hi · fr · ko · it · ja · id · tr · nl · cs · ro · vi · ar · el · hu (20).

  • Альтернатива: ?lang=xx query-параметр для клієнтів, що не контролюють заголовки
  • Дефолт: джерельна мова uk, якщо Accept-Language не вказано або мова поза списком
  • Чисельні поля (longitude, latitude, speed, sign-id, house-id) не торкаються - клієнт сам форматує
  • Спеціальні терміни (Raj Yoga, Sade Sati, тощо) зберігаються в оригінальній формі через глосарій

Документація: /languages сторінка та OpenAPI specifications для кожного ендпоінту.

Підтримка у SDK (TS / Python / PHP) та MCP-сервері з’явиться у найближчих релізах кожного пакета - див. дорожні мапи.

2026-06-11 · Free-тариф обмежено до Tier 1-3 (важкі ендпоінти → Indie+)

Безкоштовний тариф тепер покриває лише ендпоінти Tier 1-3 (до 50 кредитів). Будь-який ендпоінт Tier 4+ на Free повертає 402 PLAN_UPGRADE_REQUIRED з upgrade_to: 'indie'. Зачеплені: важкі багатоденні скани (transit-calendar, forecast-calendar, eclipses, ingresses, planetary-cycles, solar-acg, phase-return, aspect-timeline тощо), ректифікація (rectification, rectification/trutine), мульти-персон HD (hd/penta, hd/group-overlay, human-design/compatibility), усі PDF-звіти (reports/*) і AI-наративи (reports/ai/*).

AI-інтерпретація лишається безкоштовною: interpret/* та horoscope/yearly доступні на Free, як і раніше.

Що зробити: якщо ваш Free-ключ звертається до Tier 4+ ендпоінта - перейдіть на Indie ($5/міс, 50K кредитів) на astroway.info/pricing або звіртеся з публічною таблицею вартості /credits/ (маркер доступності на Free у кожному рядку).

2026-06-09 · /iching deprecated → namespace /iching/*

Голий POST /v1/iching (legacy випадковий кид гексаграми) позначено deprecated. Уся робота з I Ching живе в namespace /v1/iching/*: throw-coins (із seed), by-question, with-changing-lines, daily, lookup/{n} - на наборі Wilhelm-Baynes. Старий ендпоінт працює до 2027-06-16 (sunset) і повертає Deprecation / Sunset / Link: rel="successor-version".

Що зробити: замість POST /v1/iching використовуйте POST /v1/iching/throw-coins (підтримує seed для відтворюваності) або інший ендпоінт /iching/*.

2026-06-08 · /vedic-divisional deprecated → /vedic/varga/{D1..D60}

Загальний POST /v1/vedic-divisional (де варга передавалася в тілі) позначено deprecated на користь окремих ендпоінтів POST /v1/vedic/varga/{D1..D60} - чистіша OpenAPI/SDK-сигнатура й багатший вивід (назва варги, lagna, ayanamsa). Старий ендпоінт продовжує повноцінно працювати до 2027-06-15 (sunset, у межах гарантії стабільності /v1 ≥12 міс) і повертає заголовки Deprecation: true, Sunset: Tue, 15 Jun 2027 00:00:00 GMT, Link: …; rel="successor-version". Після цієї дати його буде видалено.

Що зробити: перенесіть виклики POST /v1/vedic-divisional із тілом { "varga": "D9", … } на POST /v1/vedic/varga/D9 (варга у шляху, решта тіла без змін).

2026-06-06 · Публічні read-ендпоінти без ключа (легкі віджети)

Набір GET /v1/public/* ендпоінтів, які працюють без авторизації (IP-rate-limited 30/год, кожна відповідь несе _footer watermark). Зручно для copy-paste cURL у документації та легких інтеграцій без реєстрації:

  • GET /v1/public/horoscope/daily?sign=aries&date=YYYY-MM-DD: денний гороскоп за знаком
  • GET /v1/public/horoscope/weekly?sign=…: тижневий
  • GET /v1/public/horoscope/monthly?sign=…: місячний
  • GET /v1/public/tarot/daily?date=…: карта дня (RWS, детермінована на добу)
  • GET /v1/public/moon-phase?date=…: фаза Місяця (детермінований розрахунок)
  • GET /v1/public/planet-of-day?date=…: планета-управитель дня тижня

Усі 12 знаків Зодіаку; date необов’язковий (типово сьогодні), невалідний знак/дата → 400. Гороскопи AI-генеровані й кешуються per (знак, період, мова); тиждень/місяць рахуються від понеділка/першого числа. Решта - детермінований розрахунок. Мова через Accept-Language.

2026-06-05 · Self-service webhooks: /v1/me/webhooks CRUD + HMAC delivery worker

Subscriptions endpoint family для outgoing webhooks. Раніше webhook-таблиця (migration 017) існувала лише для admin-side - тепер відкриваємо CRUD юзерам через dashboard /webhooks сторінку.

Terminal window
# Create
curl -X POST https://api.astroway.info/v1/me/webhooks \
-H "Authorization: Bearer <jwt>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://myapp.com/astroway-webhook",
"events": ["credits.threshold_crossed", "key.revoked", "request.failed"]
}'
# List
curl -H "Authorization: Bearer <jwt>" https://api.astroway.info/v1/me/webhooks
# Test ping (send sample event)
curl -X POST https://api.astroway.info/v1/me/webhooks/<id>/test \
-H "Authorization: Bearer <jwt>"

7 типів подій: credits.threshold_crossed, key.revoked, key.created, request.failed (5xx), billing.invoice_paid, billing.invoice_failed, plan.changed.

HMAC підпис. Кожна доставка несе X-AstroWay-Signature: t=<unix>,v1=<hex> де v1 - це HMAC-SHA256(secret, "t=<unix>.<body>"). Secret видається раз під час create і його можна ротувати (POST /me/webhooks/<id>/rotate-secret).

Delivery worker. Background process (новий astroway-webhook-worker в PM2) тягне queue, виставляє exponential backoff на 5xx відповіді клієнта: 1m / 5m / 30m / 2h / 12h. Після 5 fail-ів - webhook auto-suspend з email алертом.

Dashboard page. /dashboard/webhooks з list + create modal + test button + delivery history. Sidebar nav entry в Account section.

2026-06-03 · GET /v1/reports/history: список останніх згенерованих звітів

Новий ендпоінт повертає ваші нещодавно згенеровані PDF-звіти - тип, розмір, кількість сторінок, мову, час створення й закінчення та url. Зручно, щоб повторно отримати посилання на звіт у межах його 24-годинного терміну дії або показати останні експорти в дашборді. Виклик безкоштовний. Параметр ?limit= (1–50, типово 10).

2026-06-02 · Cache MISS/HIT instrumentation: X-Cache response header

Server logue cache outcome для кожного запиту (X-Cache: MISS | HIT | BYPASS). Це робить можливим cache hit % колонку в /dashboard/usage (зараз показує –).

Terminal window
curl -I -X POST https://api.astroway.info/v1/chart \
-H "X-Api-Key: aw_live_..." \
-H "Content-Type: application/json" \
-d '{...}' | grep -i x-cache
# X-Cache: MISS

Tracking. api_request_log.cache_status column (migration 030, enum). GET /v1/me/usage/endpoints починає повертати реальне cache_hit_pct замість null.

Pricing impact. Кешовані запити продовжують deduct credits на rendered tier - але показ показника в dashboard допомагає оптимізувати інтеграцію (на cache HIT треба, наприклад, не пересилати zustand-style chart payload).

2026-06-01 · GET /v1/version + Swagger/OpenAPI aliases + /v1/v1/* typo redirect

Дрібні зручності для SDK і поодиноких інтегрантів - серії “чому 404 на типовий запит” більше не має бути.

Новий ендпоінт GET /v1/version: безкоштовний, без auth. Повертає поточну версію API + commit + uptime:

Terminal window
curl https://api.astroway.info/v1/version
# {
# "version": "2.71.0",
# "build_commit": "abc1234",
# "started_at": "2026-06-02T08:00:00Z",
# "uptime_seconds": 12345,
# "docs_url": "https://api.astroway.info/docs/api/"
# }

SDK можуть викликати на старті для діагностики “чому раптом інша поведінка” - build_commit точно ідентифікує деплой.

OpenAPI-аліаси (301): щоб Postman / Insomnia / openapi-generator знайшли спеку з першої спроби:

АліасКуди
/v1/swagger.json/v1/openapi.json
/v1/api-docs/swagger.json/v1/openapi.json
/v1/v3/api-docs/v1/openapi.json
/v1/v2/api-docs/v1/openapi.json
/v1/swagger/v1/swagger.json/v1/openapi.json
/v1/swagger, /v1/swagger-ui*/v1/docs (302)

/v1/v1/<endpoint> → /v1/<endpoint> (308): фіксить типовий SDK-баг коли baseUrl уже містить /v1 і клієнт додає /v1/X зверху. Метод і body зберігаються, ніщо не ламається мовчки.

/api/health → /v1/health (301), інші /api/<endpoint> → JSON 404 з кодом WRONG_PREFIX: для розробників з wp-json muscle memory. Раніше це було generic-404 від nginx, тепер відповідь дає чітку підказку про правильний префікс.

Документація: нова сторінка URL-конвенції та безкоштовні ендпоінти - повний перелік безкоштовних системних ендпоінтів (/health, /health/deep, /version, /openapi.json, /docs, /reference/*, /i18n/*), безкоштовних обліково-залежних (/auth/*, /me, /keys, /admin/*, /embed/*, /books/*, /messages, /dev-assistant), та платних tier-розкладу.

2026-05-30 · Embed-віджети: опційний параметр ?disclaimer=1

Публічні embed-віджети (GET /v1/embed/*) тепер приймають опційний disclaimer=1 - додає у футер коротку оговорку про розважально-ознайомлювальний характер контенту (не медична, психологічна, фінансова чи юридична консультація). Вимкнено за замовчуванням - без параметра футер не змінюється. Увімкніть, якщо ваш комплаєнс вимагає видимої оговорки на стороні відображення.

<iframe src="https://api.astroway.info/v1/embed/wheel?date=1990-05-15&theme=dark&disclaimer=1"
width="460" height="560" style="border:0"></iframe>

2026-05-29 · Чотири нові embed-віджети (без ключа, для iframe)

Розширено набір публічних HTML-віджетів GET /v1/embed/* - тепер їх 14. Нові не потребують API-ключа, віддають готовий iframe-фрагмент, обмежені per-IP (30 запитів/год).

  • GET /v1/embed/transit?date=: позиції транзитних планет (знак + градус, ретроградність) на дату.
  • GET /v1/embed/numerology?name=&date=&system=: Число життєвого шляху / вираження / душі / особистості (system: pythagorean або chaldean).
  • GET /v1/embed/panchang?date=&lat=&lng=&tz=: тітхі / накшатра / йоґа / карана / вара + схід/захід Сонця + Раху-каал.
  • GET /v1/embed/synastry?date_a=&time_a=&lat_a=&lng_a=&tz_a=&date_b=…: оцінка сумісності + ключові міжкартові аспекти для двох субʼєктів.
<iframe src="https://api.astroway.info/v1/embed/transit?date=2026-05-29&theme=dark"
width="460" height="420" style="border:0"></iframe>

Усі віджети приймають theme (dark/light/console) та lang. Кешуються public, max-age=300.

2026-05-28 · Виправлено документацію кодів помилок

Довідник помилок тепер відповідає реальним відповідям API. Коди - UPPER_SNAKE_CASE (наприклад INVALID_INPUT, INVALID_API_KEY, CREDITS_EXHAUSTED), конверт - { ok: false, error: { code, message, details? } }, а помилки валідації (INVALID_INPUT, HTTP 400) містять details: [{ path, message }]. Якщо у вас switch (error.code) по раніше задокументованих lowercase-назвах - оновіть на реальні коди. Самі відповіді API не змінювались.

2026-05-26 · Новий ендпоінт POST /v1/reports/generate, V2 unified dispatcher

Замість 12 type-specific роутів (/reports/natal, /reports/synastry, …) - один ендпоінт із report_type enum, який диспатчить на відповідний рендерер. SDK-консументи отримують один метод замість дванадцяти; MCP-каталог - один інструмент замість дванадцяти.

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 supported report_type values: natal, transit-yearly, synastry, business, career, love, money, child, lal-kitab, human-design, tarot, vedic-kundli.

Per-type required fields validated в handler: natal/business/career/etc - chart; synastry - chart1 + chart2; tarot - seed (optional). Missing required fields → 400 with MISSING_CHART / MISSING_CHARTS error code.

Зворотна сумісність. Всі 12 type-specific ендпоінтів залишаються - /v1/reports/generate додано як additive surface, не replacement. Можна вибрати або: direct (client.reports.natal({...})) або generic (client.reports.generate({ report_type: 'natal', ... })).

Pricing. Forwarded per-renderer (natal → TIER_7, transit-yearly → TIER_8, tarot → TIER_4, тощо). Сам dispatcher не додає окремої вартості.

OpenAPI 3.1. GenerateReport - окремий компонент в /v1/openapi.json. SDK regen у наступному релізі додасть метод client.reports.generate().