NatalApi::personaChart() -> POST /western-api/v1/persona-chart on
astroapi-8. Casts the full chart for the exact moment within the first
year of life that the transiting Sun reaches the natal degree of the
chosen persona_planet.
Optional params pass through in the params array: node_type,
output_include, graphic_layout and the other chart-appearance and
aspect options. output_include defaults to raw_data server-side
(~21 KB); image tokens are ~0.5 MB per SVG and "all" returns ~4.3 MB.
HouseSystem already passed unknown values through unchanged, so letter
codes such as "A" were never broken here - unlike the Python and Node
SDKs, which raised on them. What was missing were friendly names: the
map only covered 9 of the 16 systems, so "sripati" or "equal-asc" were
forwarded verbatim instead of resolving to S and A. Added the missing
names and made VALID_LETTERS explicit for all sixteen codes. Verified
2026-09-14 on astroapi-4 and astroapi-8.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Adds the Persona Chart endpoint for DV-326. Companion PRs in
divineapi-python,divineapi-node, andDinesh-Gahlot/mcp-western-astrology.What this adds
NatalApi::personaChart()→POST /western-api/v1/persona-charton astroapi-8. Casts the full chart for the exact moment — within the first year of life — that the transiting Sun reaches the natal degree of the chosenpersona_planet.Optional params pass through in the array:
node_type(meannode|truenode),output_include,graphic_layoutand the other chart-appearance / aspect options.House system — this SDK was the one that got it right
The sibling SDKs both raise on unknown
house_systemvalues from a whitelist that was missing 7 of the API's 16 Swiss Ephemeris codes (A,D,V,X,S,T,N). That rejected the Persona Chart docs' own example,house_system="A".PHP was never affected, because
HouseSystem::resolve()returns unknown values unchanged and lets the API arbitrate — exactly as its docblock says. Worth noting as the pattern the other two should probably converge on.What was missing here were friendly names: the map only covered 9 of the 16 systems, so
'sripati'or'equal-asc'were forwarded verbatim instead of resolving toSandA. This PR adds the missing names and makesVALID_LETTERSexplicit for all sixteen codes. Verified 2026-09-14 on both astroapi-4 and astroapi-8.Response size
output_includedefaults toraw_dataserver-side (~21 KB, data only). Measured: one*_svgtoken is ~494 KB andallreturns ~4.3 MB.Testing
HouseSystem::resolve()verified for letters, lowercase, and all the newly added friendly names. Live end-to-end call confirmed: 18 planets, 12 houses, plus a second call exercising a friendly house-system name +node_type+ uppercasepersona_planet.No version bump — this repo carries no
versionfield incomposer.json; Packagist reads git tags, so tag on merge.🤖 Generated with Claude Code