AstroWay/api v2.325.2 · pt
todos os sistemas normais

// product · release notes

Changelog what is new

Only changes that affect integrator code: new endpoints, SDK releases, /openapi.json schema changes, credit price changes, deprecations, breaking changes. Newest first.

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

2026-10-28 · The natal chart returns names in the page’s language

POST /v1/chart?lang=de adds a localized block: planet, sign and aspect names in that language, keyed by the English names the response already carries ("Sun": "Sonne"). Without ?lang= the response is unchanged.

What to do with your code. Nothing if you show English names. If the chart goes on a page in another language, pass ?lang= and take the labels from localized instead of your own dictionary. Minor aspects without a translation stay in English.

2026-10-27 · Texts for the nodes, Lilith in sign and chart patterns

New keys. GET /v1/natal-texts accepts north_node.<sign>, south_node.<sign>, lilith.<sign> and pattern.<figure> (t_square, grand_trine, grand_cross, stellium, yod, kite, kind pattern). Texts exist in all 20 languages lang accepts.

What to do with your code. Nothing. To show a figure, detect it from the chart’s aspects and ask for pattern.<figure>.

2026-10-26 · The browser can see when a limit lifts

A 429 response now exposes Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset to the page. The server always sent them; the browser would not let a script read them.

What to do with your code. If you call the API from a page, read Retry-After instead of parsing the error message. Server-side code is unaffected.

2026-10-25 · Panchang at sunrise

New parameter. POST /v1/vedic/panchang/full accepts at: "sunrise": tithi, nakshatra, yoga and karana are read at local sunrise, as in a printed panchang, and time may be omitted. The response carries at and computedFor, the moment everything was read at. The default is still the moment of date + time.

Fix. In a polar day or night the sunrise-based periods (Rahu Kaal, Yamaganda, Gulika, Abhijit, choghadia) came back as 00:00-00:00. They are now null, and the response carries polarState and warning.

What to do with your code. If you show the panchang of a day, send at: "sunrise" so the figures agree with almanacs.

2026-10-24 · Public synastry: aspect strength and both charts

New fields. In POST /v1/public/synastry every aspect carries strength (0-100, the weight score is summed from) and tone (harmonious or challenging). The response also holds chart1 and chart2 in the shape of POST /v1/public/chart; a partner with timeUnknown: true has no houses or angles.

What to do with your code. Nothing. If you made two more /public/chart calls to show a partner’s houses, one request is now enough.

2026-10-23 · Gemstone remedy recommendation, and the answer names its school

POST /v1/vedic/gemstones returns a ratna recommendation from the sidereal lagna: three gems with their role, an avoid list, substitutes, and the wearing protocol (day, finger, metal, weight in ratti with carat conversion, beeja mantra). GET /v1/vedic/gemstones/navaratna returns the nine-gem reference table with no chart.

What to do with your code. Nothing, unless you built ratna logic yourself. If you did, note the school parameter: lagna-lord (default) and functional-benefic reach the same three recommended gems and different avoid lists. The response always states which school produced it, so store that field alongside the result.

latitude and longitude are required here and do not default to zero as they do on other chart endpoints: omit them and you get a 400, not a set of gems for 0N 0E.

2026-10-22 · @astroway/render 0.3.0: wheel labels on a small screen

New package option. renderWesternWheel(chart, { labelScale }) enlarges the house numbers, ASC/DSC/MC/IC, planet glyphs and the retrograde mark against the wheel, widens the signs ring and moves the planet ring in. 1 (default) is the previous look. A size: 560 wheel shown at 343 px with labelScale: 1.6 keeps house numbers near 11 px on screen.

Fix. Sign glyphs always fit their ring. Below 800 they crossed its lines; at 800 and above the output is unchanged.

What to do with your code. Nothing, unless you show the wheel smaller than its size. Then update to 0.3.0 and pass labelScale.

2026-10-22 · A read spread of the day without a key, tithi and void of course on the moon phase

New endpoint. GET /v1/public/tarot/daily-reading?lang= returns the three-card spread of the day (the same for everyone on a date) with each position read, a synthesis and advice, in the requested language. The answer has the shape of POST /v1/interpret/tarot.

New fields. GET /v1/public/moon-phase returns tithi (the Vedic lunar day, 1-30) and voidOfCourse: the void-of-course spans that touch the day.

What to do with your code. Nothing if you do not need these.

2026-10-22 · ‘Vedic endpoints: one price for the same work’

Inside the Vedic suite the same work carried different prices depending on the school. vedic/dashas/vimshottari/maha cost 50 credits and vedic/dashas/shoola/maha cost 10. Both build a period tree from one chart. The same gap sat between Parashara doshas (50) and KP or Lal Kitab doshas (10), between Parashara yogas (50) and Jaimini yogas (10 and 20 within one table), and inside shadbala, where five divisions cost 50 and naisargika cost 20.

125 paths now cost 20 credits (Tier 2). Not as a split of the difference: Tier 2 is documented as “chart plus analysis”, which is what they do, while Tier 3 is documented as “two charts or a range scan”, which none of them does.

Down from 50 to 20: dashas/{vimshottari,ashtottari,kalachakra,yogini}/*, doshas/parashara/*, yogas/parashara/*, shadbala/*, bhavabala, panchang/{full,choghadia,hora,rahu-kaal}.

Up from 10 to 20: dashas/{chara,shatabdika,shodashottari,shoola,sthira,tribhagi}/*, doshas/{kp,lal-kitab}/*, yogas/jaimini/*, jaimini/*, kp/*, lal-kitab/*.

Nothing moved where the tier description actually fits: compatibility/* takes two charts and muhurat/* scans a date range, so both stay at 50. compatibility/manglik-check stays at 20 because it takes one chart, not two.

If you budget from the table, re-read /credits/: it is generated from the same values billing uses.

2026-10-21 · Number meanings in the requested language, nakshatra name, time without seconds

New fields. Every number in /v1/numerology/{system}/* returns meaningLocalized in the requested language beside meaning. POST /v1/vedic/kundli returns nakshatra.nameLocalized. POST /v1/fixed-stars now returns conjunctions: natal planets conjunct the stars within orb (1° by default, at most 5), closest first; the stars array is unchanged.

Changed value. time on every chart endpoint also accepts HH:mm and reads it as HH:mm:00; such a request used to get a 400.

What to do with your code. Nothing if the English text suits you. For pages in other languages use meaningLocalized; until a language’s translation is ready it carries the English text with translated: false.

New parameter. Any POST /v1/reports/* takes ?retain_days=N (1-90): the PDF stays at its url that many days, and expires_at in the response says so. Without it, 24 hours as before.

New endpoint. DELETE /v1/reports/files/{filename} deletes a PDF your account made before its time is up. Free; someone else’s file answers 404.

DPA version 2. Version 1 said name and city were written nowhere, although a PDF report prints the name and is kept a day. Version 2 describes report files and how long they are kept. If you accepted version 1, it stands until you accept version 2 in the dashboard (Billing).

What to do with your code. Nothing. To hand a client a long-lived link, add retain_days.

2026-10-20 · Tarot card texts without a key

New endpoint. GET /v1/public/tarot/texts?cards=&lang= returns, for each of the 78 Rider-Waite-Smith cards, a three-paragraph description and texts on love, career, finance, health and spirit for the upright and reversed card, with the name and keywords in the requested language. The texts are our own.

What to do with your code. Nothing if the spread’s meaning is enough. For a card page, fetch its text by slug and cache it: the data is static. A language whose translation is not ready yet gets the English text with textLocalized: false.

2026-10-19 · KP: star lords and planet names corrected, a horary chart from the number

Changed values. The KP Vimshottari table mixed up Venus and Jupiter. Venus stars (Bharani, Purva Phalguni, Purva Ashadha) reported Jupiter as their lord, and Jupiter stars (Punarvasu, Vishakha, Purva Bhadrapada) were cut into subs in Venus order. So sub, subSub and starLord inside those six nakshatras were wrong across /v1/vedic/kp/* and in kpSaturnChain/kpMoonChain of /v1/vedic/doshas/kp/sade-sati. Separately, /v1/vedic/kp/sub-lords, /significators, /planet-cuspal-position and /transit-kp returned Mercury’s longitude under the name Mars, Venus’s under Mercury, Mars’s under Jupiter and Jupiter’s under Venus. Recompute any of these responses you stored.

Horary by number. POST /v1/vedic/kp/horary used to read the number off a list of 243 subs, so from 23 on the ascendant drifted and 249 landed in Aquarius. It now uses the 249-entry table, where the six subs that straddle a sign edge are split in two. The response casts the chart: segment (start and end of the slice), Placidus cusps for the moment of the question day when that degree rises at the place (housesOffsetHours), and the nine grahas with house and chain at the question time. New request field ascendantAt: middle (the default, as before) or start. Latitudes past 66.5° get 422: Placidus is undefined beyond the polar circles.

Jaimini. Shoola dasha (/v1/vedic/dashas/shoola/* and shoola in /v1/vedic/jaimini/dasha-summary) compared sign strength with planet numbers mixed up: Mars was read as Jupiter, Venus as Mercury. For some charts the sign the dasha starts from has changed; it now agrees with PyJHora. Sthira dasha and the arudhas use the same rules; in the charts we checked they did not change.

What to do with your code. If you stored KP or Shoola results, recompute them. For horary read cusps and planets; ascendant is where it was.

2026-10-19 · Sign horoscopes: sections, solar houses, the period’s events

New fields. Daily, weekly and monthly horoscopes (/v1/horoscope/{daily,weekly,monthly} and /v1/public/horoscope/*) return sections (overview, love, career, health, finance, advice), and beside them computed data: transits with each planet’s solar house counted from the requested sign, aspects, the period’s events (ingresses, stations, lunar phases), energy (a 1-10 score with its factors listed), lucky and compatibleSigns.

Changed value. The text is now written for the sign from its solar houses (before, all 12 signs were given the same transits), and horoscope is the same sections as plain paragraphs, without **bold** or bullets.

What to do with your code. If you turned ** into bold, you no longer need to. To show cards by topic, use sections.

2026-10-18 · Human Design texts without a key

New endpoint. GET /v1/public/human-design/texts?lang= returns reference prose for everything POST /v1/human-design names: five types (summary, strategy, signature, not-self theme), eight authorities, five definition kinds, twelve profiles, six lines, nine centres (defined and open), 36 channels and 64 gates, in 21 languages. Keys are the same English identifiers the chart returns. The texts are our own.

What to do with your code. Nothing if you have your own texts. If not: fetch once per language (cached for a week) and look a text up by type, authority, profile.profile, the centre name, or the channel’s "lower-higher" gates. Crosses and gate lines are not in it yet.

2026-10-17 · Numerology chart and kundli in one call

New endpoints. POST /v1/numerology/{system}/chart returns the six core numbers (Life Path, Expression, Soul Urge, Personality, Birthday, Personal Year) with their meanings for 20 credits instead of 60 for six single calls. POST /v1/vedic/kundli returns the D1 lagna and nine grahas, the Moon nakshatra, the running Vimshottari maha and antar, and the Parashara yogas and doshas with a list of those present, for 50 credits. Each part matches the answer of its own endpoint.

What to do with your code. Nothing if single calls suit you. latitude and longitude are required on the kundli: without them there is no lagna, and the endpoint answers 400 rather than a chart for 0,0.

2026-10-16 · Keys are stored only as a hash, no second showing

We store only the SHA-256 of each key. A key is shown once: at creation (POST /v1/keys), at rotation (POST /v1/keys/{id}/rotate) and at password sign-up.

Changed responses. POST /v1/keys/{id}/reveal for a key that was already shown returns api_key: null and key_shown_once: true. GET /v1/me returns keys[].key as null together with keyShownOnce: true. GET /v1/keys has a new field key_shown: false marks a key created by signing in with Google, GitHub, a one-time code or an order, which its owner has not seen yet.

First show. For a key with key_shown: false the same POST /v1/keys/{id}/reveal issues a new key of the same class once and returns it with first_show: true. The old value was never shown, so nobody is using it.

What to do with your code. If you read a key from reveal or /me, save it when you create or rotate it: it cannot be fetched anywhere afterwards. Rotate a lost key; the old one stops working.

2026-10-16 · Sandbox is actually free, and no longer inflates your live limit

aw_test_* keys no longer spend credits. The docs have promised this since launch, but no branch for the prefix existed anywhere in the credit path, so sandbox keys were billed like any other.

What to do with your code. Nothing, if you test on aw_test_*: those calls are now free and the responses are unchanged. If you were calling AI interpretation, generated reports or rendering with a sandbox key, those paths now return 402 SANDBOX_ENDPOINT_UNAVAILABLE and need an aw_live_* key. Each of those calls costs real money per request, and a key that spends no credits has no ceiling to bound it, so sandbox covers the calculation endpoints.

This also closes a side effect of how the promise used to be approximated. Instead of charging nothing, test keys were provisioned with a one-million-credit budget. The account limit is the sum of credits_limit across active keys, so a single active test key raised the ceiling for the whole account, live key included, from 10,000 to 1,010,000. Test keys are no longer part of that sum.

2026-10-15 · Retrograde shadow, exact Lichun year bounds, a key without a limit

New fields. POST /v1/retrograde-periods returns shadowStart for each period (the planet first reaches the degree where it will turn direct) and shadowEnd (it regains the degree where it turned retrograde). POST /v1/chinese/zodiac/animal returns yearStart and yearEnd: the exact Lichun moments that bound the solar year, in UTC and Beijing time.

Changed value. GET /v1/auth/keys/me for a key without a credit limit returns credits_remaining and credits_total_this_period as null together with unlimited: true, instead of 0.

What to do with your code. Nothing if you do not need these fields. If you show a key’s balance, handle null.

2026-10-15 · Reading your own account no longer costs credits

Eight endpoints that only report the state of your own key were charging 10 credits a call. They cost nothing now, and they are no longer blocked by an exhausted quota:

  • GET /v1/auth/keys/me
  • GET /v1/keys, GET /v1/keys/usage, GET /v1/keys/me/spend-cap
  • GET /v1/webhooks, GET /v1/webhooks/{id}, DELETE /v1/webhooks/{id}
  • GET /v1/mcp/tools-list

The second half was worse than the price: the credit gate refuses at cost zero as well, so a key that had just been handed a 429 could not read its own usage to find out why. These calls skip the gate now, the way sandbox keys do.

Actions stay metered, because they do something irreversible: creating and rotating a key, reveal, POST /v1/webhooks/subscribe and POST /v1/webhooks/{id}/test.

If your code reads X-Credits-Used after these calls, it will now see 0.