Theo: planet strength & disposition¶
Two questions the Theo system answers separately, and one it answers alongside them:
| Question | Field | Range | Endpoint |
|---|---|---|---|
| How much can this planet do? | strength |
Shadbala over the classical requirement; 1.0 is "able" |
/theo/planets |
| How kindly does it act here? | disposition |
−1.0 … +1.0, with a plain-words band | /theo/planets |
| How tied is it to the rest of the chart? | connection |
≥ 0, unsigned | /theo/planets, /influence-network |
These three are never collapsed into one number
A strong malefic and a weak benefic are different situations, and a planet that is heavily connected to a chart may be helping or hurting. Any product that multiplies strength by kindness, or reads a connection as a verdict, is inventing a quantity the tradition does not have. Each field is published on its own so your UI can decide what to show — the API will not decide it for you.
Every response carries method_version. Pin it if your product's copy depends on the exact
numbers; it changes when the model changes, and the changelog says how.
GET /v1/vedic/charts/{id}/theo/planets¶
Where each of the nine grahas stands in this chart. Scope charts:read. Requires a Vedic
chart — a Western one returns 422 with "reason": "unsupported_astrology_system", as does
/theo/houses.
curl -H "Authorization: Bearer $TOKEN" \
"https://api.astrolinkers.com/v1/vedic/charts/$CHART/theo/planets"
{
"chart_id": "019febf3-2900-7542-9982-f00048b6da70",
"method_version": "theo-strength-disposition-v2",
"planets": [
{
"planet": "sun",
"strength": {
"virupa": 584.19,
"rupas": 9.74,
"required_rupas": 5.0,
"ratio": 1.947,
"rank": 1,
"components": {
"naisargika": 60.0,
"dig": 30.0,
"uchcha": 43.23,
"drik": -96.77,
"kala": 197.19,
"chesta": 110.54,
"sthana": 240.0
},
"missing": [],
"complete": true
},
"disposition": {
"score": 0.08,
"band": "mixed",
"terms": [
{"name": "functional_nature", "score": -0.6, "weight": 0.3,
"reason": "malefic for a gemini lagna"},
{"name": "dignity", "score": 0.2, "weight": 0.25, "reason": "friend"},
{"name": "house", "score": 0.6, "weight": 0.2,
"reason": "house 1 from the lagna"},
{"name": "association", "score": 0.598, "weight": 0.15,
"reason": "80% of the influence on it is from friends"},
{"name": "condition", "score": 0.0, "weight": 0.1,
"reason": "no affliction of state"}
]
},
"connection": {"received": 302.11, "given": 182.0}
},
"…8 more bodies"
]
}
Bodies are returned in a fixed order: Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn,
Rahu, Ketu. Sort client-side by disposition.score or strength.rank as your view needs.
strength — Shadbala against what the planet needs¶
| Field | Meaning |
|---|---|
virupa |
The Shadbala total in virupa. |
rupas |
The same total in rupas (60 virupa = 1 rupa). |
required_rupas |
What BPHS says this planet's kind needs. |
ratio |
rupas / required_rupas. 1.0 is classically adequate (purna); below is alpa. |
rank |
1 is the strongest planet in this chart. |
components |
The six balas that make up the total, in virupa. |
missing |
Names of any bala that could not be counted. Empty in normal operation. |
complete |
false while missing is non-empty. |
Do not print a ratio while complete is false
An incomplete total is low for every planet alike, so it still ranks them correctly —
but shown as an absolute figure it calls the whole chart weak. Treat complete: false
as "rank only, no label". In the normal case (a chart created through this API)
complete is true and missing is [].
The requirement table (BPHS), in rupas:
| Planet | Required |
|---|---|
| Sun | 5.0 |
| Moon | 6.0 |
| Mars | 5.0 |
| Mercury | 7.0 |
| Jupiter | 6.5 |
| Venus | 5.5 |
| Saturn | 5.0 |
Rahu and Ketu carry no requirement — the six balas do not rate shadow bodies — so their
strength is null. That is not the same as zero, and a UI that renders it as zero will
rank the nodes last in every chart. They still carry a disposition and a connection.
The six components, all in virupa:
| Component | What it measures |
|---|---|
sthana |
Positional strength beyond uchcha: saptavargaja + ojayugma + kendradi + drekkana. |
uchcha |
Exaltation strength — distance from the debilitation point, 0…60. Also a sthana sub-bala; reported separately because it is the one a reader can check by eye. |
dig |
Directional strength — maximal in the planet's preferred angle (Sun/Mars 10th, Moon/Venus 4th, Jupiter/Mercury 1st, Saturn 7th). |
kala |
Temporal strength — paksha, vara, abda, masa, yuddha, plus nathonnatha, tribhaga and ayana from the shape of the birth day. |
chesta |
Motional strength — see the eight states. |
naisargika |
Natural ranking: Sun 60 → Saturn ≈ 8.57. |
drik |
Aspectual strength — signed sum of incoming drishti. This one can be negative, which is why a total can be lower than the sum of the parts you expected. |
virupa = the sum of all seven fields above (uchcha is inside sthana conceptually but is
not double-counted: sthana here is the remainder).
Sthana bala, in detail¶
| Sub-bala | Max | Rule |
|---|---|---|
| Saptavargaja | 315 | The planet's housing across the seven classical divisions (D1 rasi, D2 hora, D3 drekkana, D7 saptamsa, D9 navamsa, D12 dwadashamsa, D30 trimshamsa), graded per division: mooltrikona 45, own 30, great friend 22.5, friend 15, neutral 7.5, enemy 3.75, great enemy 1.875. |
| Ojayugma | 30 | 15 for an agreeable sign and 15 for an agreeable navamsa. The Moon and Venus want even signs; every other rated planet wants odd. |
| Kendradi | 60 | Kendra (1/4/7/10) 60, panaphara (2/5/8/11) 30, apoklima (3/6/9/12) 15. |
| Drekkana | 15 | 15 when a planet sits in the third of the sign that suits it: male (Sun, Mars, Jupiter) first, hermaphrodite (Mercury, Saturn) second, female (Moon, Venus) third. |
The friend/enemy tiers in saptavargaja are the five-fold relationship (panchadha maitri): the permanent friendship table combined with the temporary one, where whoever occupies the 2nd, 3rd, 4th, 10th, 11th or 12th from a planet is a temporary friend and the 1st, 5th, 6th, 7th, 8th and 9th are temporary enemies.
| Permanent | + temporary friend | + temporary enemy |
|---|---|---|
| friend | great friend | neutral |
| neutral | friend | enemy |
| enemy | neutral | great enemy |
The divisions are the Parashari ones, not the generic sign-by-sign walk: an odd sign's first hora belongs to the Sun and its second to the Moon (reversed in an even sign); the drekkana thirds are the sign, the 5th from it and the 9th; an odd sign's saptamsa counts from itself and an even sign's from its opposite; the trimshamsa is five unequal arcs owned by Mars, Saturn, Jupiter, Mercury and Venus, reversed in an even sign.
Chesta bala: the eight states of motion¶
A planet is strongest when it is doing something unusual. The state is read from the planet's true speed against its mean daily motion.
| State | Virupa | What it is |
|---|---|---|
vakra |
60 | Retrograde |
atichara |
45 | Much faster than mean (> 1.5×) |
anuvakra |
30 | Retrograde back into the previous sign |
sama |
30 | At the mean rate (± 10%) |
chara |
30 | Faster than mean |
vikala |
15 | Stationary (< 5% of mean) |
manda |
15 | Slower than mean |
mandatara |
7.5 | Much slower than mean (< 50%) |
The Sun and the Moon never turn retrograde, so BPHS gives them substitutes: the Sun's chesta bala is its ayana bala and the Moon's is its paksha bala. Both are also counted inside kala bala — the classical text counts them twice on purpose, and this follows the text.
disposition — how benefic the planet is for this lagna¶
Five voices, each bounded in −1 … +1, each with a weight and a stated reason. The score is their weighted mean, so it is bounded too. Every term is returned, including the ones that said nothing, so a UI can show which voice carried the answer.
| Term | Weight | What it looks at |
|---|---|---|
functional_nature |
0.30 | The planet's role for this ascendant: yogakaraka +1.0, functional benefic +0.6, lagnesha +0.5, neutral 0.0, functional malefic −0.6. |
dignity |
0.25 | Its standing in the sign it occupies: exaltation +1.0, mooltrikona +0.8, own +0.6, great friend +0.4, friend +0.2, neutral 0.0, enemy −0.4, great enemy −0.6, debilitation −1.0. |
house |
0.20 | The house from the lagna: 9th +1.0, 5th +0.8, 1st and 10th +0.6, 4th and 7th +0.4, 3rd and 11th +0.3, 2nd 0.0, 6th −0.5, 12th −0.6, 8th −0.8. |
association |
0.15 | The share of the connection reaching the planet that comes from its friends, rescaled to −1 … +1. A share, never a sum: a sum would make the score depend on how many malefics exist at all. |
condition |
0.10 | Combustion (−1.0, within the planet's own orb: Mercury 5°, Venus 10°, Jupiter 11°, Saturn 15°, Mars 17°), papakartari — hemmed by malefics on both sides (−0.5), retrogression (± 0.2: a benefic gains voice, a malefic gains obstinacy). |
Functional, not natural
Saturn is a yogakaraka for a Libra lagna and a hard planet for a Cancer one. A permanent benefic/malefic table cannot say that. Change nothing but the ascendant and this score moves — that is the point of it.
Bands (disposition.band):
| Score | Band |
|---|---|
| ≥ 0.5 | very_benefic |
| ≥ 0.15 | benefic |
| > −0.15 | mixed |
| > −0.5 | difficult |
| ≤ −0.5 | very_difficult |
Rahu and Ketu are rated on all five voices except dignity — they own no sign, so the dignity
term abstains with weight: 0.0 and the reason "no dignity is defined for this body". An
abstaining term keeps the remaining weights in proportion; it does not drag the score to zero.
Worked example, from the Sun in the response above:
functional_nature −0.6 × 0.30 = −0.180 (malefic for a gemini lagna)
dignity +0.2 × 0.25 = +0.050 (in a friend's sign)
house +0.6 × 0.20 = +0.120 (1st from the lagna)
association +0.598 × 0.15 = +0.090 (80% of what reaches it is friendly)
condition 0.0 × 0.10 = 0.000 (unafflicted)
───────
+0.080 → band "mixed"
A strong planet (ratio 1.95, rank 1) that is only mildly helpful — exactly the pairing a
single collapsed number cannot express.
connection — how tied the body is to the chart¶
received is the total strength of every tie reaching the body; given is the total it
sends out. Both are unsigned magnitudes, never verdicts. The individual ties are listed
by /influence-network.
GET /v1/vedic/charts/{id}/theo/houses¶
How much of the chart's power falls in each house, and whether it lands well.
curl -H "Authorization: Bearer $TOKEN" \
"https://api.astrolinkers.com/v1/vedic/charts/$CHART/theo/houses"
{
"chart_id": "019febf3-2900-7542-9982-f00048b6da70",
"method_version": "theo-strength-disposition-v2",
"houses": [
{
"house_number": 1,
"sign": "gemini",
"occupants": ["sun", "jupiter"],
"weighted": 2303.02,
"share": 0.1175,
"support": 0.011
},
{
"house_number": 2,
"sign": "cancer",
"occupants": ["ketu"],
"weighted": 1464.72,
"share": 0.0747,
"support": 0.758
},
"…10 more houses"
]
}
| Field | Meaning |
|---|---|
weighted |
Σ (each planet's rupas × its connection to the house). Raw, for auditing. |
share |
That house's share of the chart's total power. The twelve sum to 1.0, so 0.0833 is an average house. |
support |
−1 … +1 — the share of the connection reaching the house that this lagna calls benefic. |
Power and support are different questions, and a busy 8th house is powerful and hard.
Read share for "how much happens in this area of life" and support for "does it land
well". A planet with no Shadbala requirement (a node) lends connection but no weight — it is
not rated on the six balas, so it cannot be weighted by them.
Migration from net_strength¶
Before theo-strength-disposition-v1, /influence-network published a signed
net_strength per planet, and /theo/sign-influences published net_strength,
benefic_strength and malefic_strength per sign. Those fields are gone.
They were an artefact rather than a reading. The number summed a static benefic/malefic polarity over every other planet; because a planet does not influence itself and the polarity table holds four benefics against five malefics, the four natural benefics scored worst in 82% of charts by arithmetic alone. It measured the table, not the chart.
| Old field | Replacement |
|---|---|
planet_summaries[].net_strength |
disposition.score + disposition.band on /theo/planets for the verdict; connection.received on the same endpoint for the magnitude. |
by_sign[].net_strength |
support on /theo/sign-influences. |
by_sign[].benefic_strength / malefic_strength |
connection (the unsigned total) + support (the balance) on the same endpoint. |
"planet strength" read off net_strength |
strength.ratio on /theo/planets — an actual Shadbala. |
If your integration ranked planets by net_strength, the closest honest replacements are
disposition.score (for "who helps this person") and strength.rank (for "who can act").
They answer different questions, and picking the right one is the migration.